美文网首页
Flutter-dio-无法抓包的解决方案

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

作者: 谌文 | 来源:发表于2023-04-20 13:23 被阅读0次
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;
      };
  }
}

相关文章

  • Flutter 组件抓包问题

    问题详情: flutter 组件未进行特殊设置的情况下不会走代理,无法被抓包; 解决方案: (1)在 dio 网络...

  • 问题大杂烩

    charles macos无法抓包 charles设置localhost抓包配置charleshost之后出现 I...

  • Fiddler无法抓包

    【背景】测试版的APP,fiddler4能正常抓包,最近提测预生产版本的APP,fiddler4抓不到包。 【原因...

  • 关于Charles的配置

    Android7.0 和 Charles 的抓包 出现无法抓包unknown和证书无效 - CSDN博客

  • 微信小程序3.6.0.18 抓包解决方案

    之前都能正常抓包小程序的内容,今天突然抓包失败【更新后无法抓包,之前没有抓包需求,没观察过】。发现小程序进程的名字...

  • 微信小程序3.7.X 抓包解决方案

    之前都能正常抓包小程序的内容,今天突然抓包失败【更新后无法抓包,之前没有抓包需求,没观察过】。发现小程序进程的名字...

  • Fiddler:证书过期引发的网络无连接

    Fiddler证书过期,启动Fiddler后百度无法打开,应用无法抓包,禁用https抓包后,百度可以打开,目标应...

  • 记事本

    部分APP无法代理抓包的原因及解决方法(flutter 应用抓包) https://www.cnblogs.com...

  • fiddler抓包笔记

    1.Fiddler出现tunnel to 443无法抓包怎么解决?fiddler抓包出现443的解决方法https...

  • 安卓抓包总结

    1.大纲 主要是从几个点来了解安卓APP通用的解决办法: wifi代理抓包 vpn抓包 客户端ssl验证解决方案 ...

网友评论

      本文标题:Flutter-dio-无法抓包的解决方案

      本文链接:https://www.haomeiwen.com/subject/msprjdtx.html