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模拟器和安卓模拟器进行抓包