一:使用dio网络请求框架会导致无法抓包问题
一:背景
入职一家新公司, 开发Flutter, 提测需求的时候,测试提bug都不提供数据的,这让我很崩溃啊,这我哪知道是后台数据问题还是业务问题,我还要去卡代码复现流程,我就让测试去抓包,测试说没抓过啊,然后测试就去抓,发现没法抓包,我洛去,居然dio网络请求框架会导致无法抓包. 这我就来兴趣
二:探索
这个手机设置http配置代理你还记得吗? 是的,思路就在这里
, 我们只需要将这个ip地址和port地址(与抓包软件ip,port一致) 设置到dio的httpClientAdapter,核心代理如下
(dio?.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.idleTimeout = const Duration(seconds: 5);
client.findProxy = (uri) {
proxyEd = true;
return "PROXY 192.168.12.xxx:88xx";
};
// 代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return null;
};
这样就可以抓包了,怎么用抓包软件抓包前往如下链接学习https://blog.csdn.net/weixin_40608713/article/details/114873070
但貌似遇到个问题,不可能每次手机设置好代理IP地址和端口后,再去修改代码打包吧,那不得崩溃
真叫人头大.png
没有一直可以获取到代理IP地址和port的方法
我想到了一种方式,那就是再APP内做个UI弹框入口,再这里设置IP地址和port,
nice.png
思考🤔
有没有一种自动获取到手机设置的代理ip地址和port
答案有的
http_proxy
专门获取手机代理IP地址的库
class Proxy {
// 是否启用代理
static bool isProxy = true;
// 设置成功代理IP过,就不再重复设置
static bool proxyEd = false;
/// 设置抓包
static Future setProxy(Dio? dio) async {
if (!isProxy || proxyEd || dio == null) return;
HttpProxy? proxy = await HttpProxy.createHttpProxy();
if (proxy?.host == null) {
isProxy = false;
return;
}
(dio?.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.idleTimeout = const Duration(seconds: 5);
client.findProxy = (uri) {
proxyEd = true;
return "PROXY ${proxy?.host}:${proxy?.port}";
};
// 代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return null;
};
}
}
网友评论