Flutter中Dio如何抓取Https

前言:之前写了一篇《Flutter中Dio灵活设置抓包代理主机IP和端口》,解决了Flutter中Dio框架抓包只能在代码中写死代理IP和端口号的问题。现在确实可以用户灵活的自行设置代理IP和端口号了。 但是又有个问题,真实使用中发现Https抓不了。

一、Https抓包参考文章

一般我们抓包无外乎两种工具:Mac上使用Charles;Windows上使用Fiddler。这一点没什么毛病。

百度了下,如何用两种工具抓取Https的包,网上大多都是一样的步骤,一般情况也确实是可用的,这里直接贴下链接,就没有必要再写一次了:

  • 1. Charles抓包https
  • 2. 使用Charles进行HTTPS抓包
  • 3. Charles使用 (抓取HTTPS包)

置于Fiddler,也是差不多的,因为本人用的Mac。所以就没看了。但是测试也是可以在Fiddler上抓到Https请求的。

二、Flutter抓Https请求修改

上面的是常规的Https配置,但是在Flutter上Dio则需要修改一下才能抓到包。

前置条件:

    1. Charles的Root Certificate已经安装


      Charles Root Certificate
    1. 手机上已经下载安装了Charles的证书


      Download And Install on Mobile Device
Tips
  1. 手机上wifi,需要先设置手动代理
  2. 浏览器输入:chls.pro/ssl 下载证书并安装
  3. 如果是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的请求咯。


抓Https请求妥妥的

你可能感兴趣的:(Flutter中Dio如何抓取Https)