Flutter-dio-无法抓包的解决方案

wolecao.png
一:使用dio网络请求框架会导致无法抓包问题

一:背景

入职一家新公司, 开发Flutter, 提测需求的时候,测试提bug都不提供数据的,这让我很崩溃啊,这我哪知道是后台数据问题还是业务问题,我还要去卡代码复现流程,我就让测试去抓包,测试说没抓过啊,然后测试就去抓,发现没法抓包,我洛去,居然dio网络请求框架会导致无法抓包. 这我就来兴趣

二:探索

这个手机设置http配置代理你还记得吗? 是的,思路就在这里, 我们只需要将这个ip地址和port地址(与抓包软件ip,port一致) 设置到dio的httpClientAdapter,核心代理如下

截屏2023-04-21 11.27.22.png

     (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;
      };
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容