onRequest method
Called when the request is about to be sent.
Implementation
@override
Future<void> onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
//print("testmonitor onRequest url111 = ${options.uri.toString()} ${this}");
final requestDate = DateTime.now().millisecondsSinceEpoch;
final url = options.uri;
final requestUrl = url.toString();
final scheme = url.scheme;
final host = url.host;
final path = url.path;
final query = url.query;
final method = options.method;
late List<MonitorPair> requestHeaders = [];
//print("request header size = ${options.headers.length}");
for (var entry in options.headers.entries){
requestHeaders.add(MonitorPair(entry.key,entry.value.toString()));
}
final requestBody = options.data;
final requestContentLength = requestBody?.length ?? 0;
final requestContentType = options.contentType?.toString() ?? "";
//print('requestDate: $requestDate, url: $url, scheme: $scheme, host: $host, path: $path, query: $query, method: $method, requestHeaders: $requestHeaders, requestBody: $requestBody, requestContentLength: $requestContentLength, requestContentType: $requestContentType');
var monitor = Monitor(url :requestUrl, scheme:scheme, host:host, path:path, query:query, protocol:"",method:method, requestHeaders : jsonEncode(requestHeaders),
requestBody:(requestBody!=null) ?requestBody.toString():"", requestContentType:requestContentType, requestContentLength:requestContentLength, requestDate:requestDate,source: source);
var uuid = DateTime.now().microsecondsSinceEpoch;
monitorMap[uuid] = monitor.copyWith();
monitorLocalMap[uuid] = monitor;
options.extra["uuid"] = uuid;
//print("dio_process request url = $requestUrl uuid = $uuid");
/* try {
var invokeMethod = platform.invokeMethod('addRequest',{"message":jsonEncode(monitor)});
invokeMethod.then((value) {
channelDataBaseId = value;
print("monitor_intercept channelDataBaseId = send addRequest id = $value url = ${monitor.url}");
});
// 处理来自原生平台的数据
} catch (e) {
// 处理异常
}*/
//同步给外部
try{
var invokeMethod = const MethodChannel('dio_monitor').invokeMethod('addRequest',{"message":jsonEncode(monitor),"uuid":uuid});
invokeMethod.then((value) {
//print("object value = $value");
var jsonMap = json.decode(value);
//print("jsonMap$jsonMap");
var uuid = jsonMap["uuid"];
var id = jsonMap["id"];
var uuidMonitor = monitorMap[uuid];
if(uuidMonitor!=null){
//print("dio_process notify out after get = ${uuidMonitor.url} uuid = $uuid outerid = $id" );
uuidMonitor.outerId = id;
monitorMap[uuid] = uuidMonitor;
//print("dio_process notify out after get after = ${uuidMonitor.url} uuid = $uuid outerid = ${monitorMap[uuid]}" );
}
//channelDataBaseId = value;
//print("monitor_intercept channelDataBaseId = send addRequest id = $value url = ${monitor.url}");
});
}catch(e){
}
//database?.insertValue(monitor).then((value) => monitor.id=value);
MonitorDataBaseUtils.instance.getMonitorDaoBase().then((value){
value.insertValue(monitor).then((value) {
var uuid = options.extra["uuid"];
var localMonitor = monitorLocalMap[uuid];
localMonitor?.id = value;
print("插入本地后的 id = ${value} localMonitor = ${localMonitor==null} uuid = $uuid");
});
});
super.onRequest(options, handler);
}