onRequest method

  1. @override
Future<void> onRequest(
  1. RequestOptions options,
  2. RequestInterceptorHandler handler
)

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);
}