
如题,Flutter中的抓包跟普通的app抓包有点不太一样,抓不到。。。
Flutter无法抓包的问题根源:
Flutter 应用的网络请求是不走手机的系统代理的,也就是说你在系统设置中设置了代理地址和端口号后 Flutter 也不会走你的代理,而抓接口是必须要设置代理的。
其实有很多网友给出了抓包的设置和方法,基本上都是配置互联网共享的方式和修改代码的方式。我这里就着重说下代码修改的方式。
这里是我参考的资料:
https://blog.csdn.net/haha223545/article/details/91541452
https://zhuanlan.zhihu.com/p/26182135
https://juejin.cn/post/6844903733478817800
https://github.com/flutterchina/dio/issues/158
我的总结和方法:
1、手动添加手机的代理;
2、在网络库里面修改代码:
final Dio _dio = Dio();
/// 设置代理uri
void addProxyUri({String proxyIP, String proxyPort = "8888"}) {
(_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
client.findProxy = (uri) {
if (proxyIP == null || proxyIP.isEmpty) {
return 'DIRECT';
}
return 'PROXY $proxyIP:$proxyPort';
};
return client;
};
}
/// 添加监听时会调用代理
void addInterceptor(Interceptor interceptor) {
_dio.interceptors.add(interceptor);
addProxyUri(proxyIP: "192.168.0.145", proxyPort: "8888");
}
如代码所示,大致意思就是把用户配置的代理ip和代理端口拿到,设置,直接调用就行了。
调用addProxyUri(proxyIP: "192.168.0.145", proxyPort: "8888");设置你设定的代理ip和端口即可。
但是,需要着重注意下client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;这行配置,直接免去证书校验;
如果不加这一行,会报错:
I/flutter (27653): Ives dio err: DioError [DioErrorType.DEFAULT]: HandshakeException: Handshake error in client (OS Error:
I/flutter (27653): CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate chain(handshake.cc:354))
打开Charles抓取请求,如图:
结果显示可以愉快地玩耍了。
完毕。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)