前言:之前写了一篇《Flutter中Dio灵活设置抓包代理主机IP和端口》,解决了Flutter中Dio框架抓包只能在代码中写死代理IP和端口号的问题。现在确实可以用户灵活的自行设置代理IP和端口号了。 但是又有个问题,真实使用中发现Https抓不了。
一、Https抓包参考文章
一般我们抓包无外乎两种工具:Mac上使用Charles;Windows上使用Fiddler。这一点没什么毛病。
百度了下,如何用两种工具抓取Https的包,网上大多都是一样的步骤,一般情况也确实是可用的,这里直接贴下链接,就没有必要再写一次了:
置于Fiddler,也是差不多的,因为本人用的Mac。所以就没看了。但是测试也是可以在Fiddler上抓到Https请求的。
二、Flutter抓Https请求修改
上面的是常规的Https配置,但是在Flutter上Dio则需要修改一下才能抓到包。
前置条件:
-
Charles的Root Certificate已经安装
-
-
手机上已经下载安装了Charles的证书
-
- 手机上wifi,需要先设置手动代理
- 浏览器输入:chls.pro/ssl 下载证书并安装
- 如果是iOS 10以后的系统,需要手动信任证书
按上面的参考文档,我都设置了,却发现仍然抓不到包,都是报红~
百思不得其解,怎么弄也不行。
三、小改动,大回报
后面,灵机一动,想着是不是Dio没有信任证书导致的,就加了信任证书的代码,发现就解决了。完美~
(dio?.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.findProxy = (url) {
return proxy;
};
//Trust certificate for https proxy
client.badCertificateCallback = (cert, host, port){
return true;
};
return client;
};
现在就可以美美的抓到Https的请求咯。