Mac flutter项目Dio网络请求Charles 抓包

1、问题发现

同样是iPhone 模拟器使用XCode运行项目的时候可以Charles抓包 但是一旦运行了flutter项目就无法实现Charles抓包(所以应该就不是charles或者网络配置)

2、解决问题

经过一系列的查找发现是dio框架没有
flutter开发 dio网络请求需要在代码里面设置代理才可以进行抓包
这边的处理方法是在单利创建的时候添加一下代码块

if (kDebugMode){
      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
          (HttpClient clinet) {
        clinet.badCertificateCallback =
            (X509Certificate cert, String host, int port) => true;
        //// 这边的xxx.xxx.xxx.xxx: 可以代开设置 网络环境查看现在的网络ip进行配置
        clinet.findProxy = (uri) => 'PROXY xxx.xxx.xxx.xxx:8888';
      };
    }

我这边调用的时机是在创建单利实例化之后就调用一下代码

 DioClient._internal() {
    dio = Dio(
      BaseOptions(
////设置baseUrl
        baseUrl: 'http:///',
        connectTimeout: const Duration(milliseconds: 30000), // 连接超时时间
        receiveTimeout: const Duration(milliseconds: 30000), // 接收超时时间
        headers: {
          'Content-Type': 'application/json',
        },
      ),
    );

    if (kDebugMode){
      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
          (HttpClient clinet) {
        clinet.badCertificateCallback =
            (X509Certificate cert, String host, int port) => true;
        //// 这边的xxx.xxx.xxx.xxx: 可以代开设置 网络环境查看现在的网络ip进行配置
        clinet.findProxy = (uri) => 'PROXY xxx.xxx.xxx.xxx:8888';
      };
    }

   

    dio.interceptors.add(
      DioInterceptors(),
    );
  }

总结

经过测试可以对iOS模拟器和安卓模拟器进行抓包

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容