• Flutter实战-请求封装(六)之设置抓包Proxy


    63d4597f94c10e9b285eac94e97758a7.jpeg

    用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来源和作者)

    注意:无特殊说明,flutter版本为3.0+


    一.代理设置的通常做法

    很多开发细化开发的时候使用Charles进行抓包,一般网上的教程都是如下:

    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (HttpClient client) { 

     client.findProxy = (uri) { return "PROXY localhost:8888"; 

     }; };

    这样在开发的时候,就可以在Charles抓到相关请求内容,但是如何让测试也可以进行抓包很少 有提到。

    二.代理设置改造

    下面我们对设置代理的方法进行改造,使得测试人员也可以对Flutter类型的App进行抓包。

    1.安装http_proxy

    http_proxy: ^1.2.0

    感谢大佬提供的插件,我们知道ios和Android获取http代理的方式是不一样的,此插件提供了getProxyHost和getProxyPort两个原生通道,并在双端实现了获取代理host和port的方法。

    2.定义Proxy类

    此类含有初始化方法,和是否开启代理

    class Proxy {
    // 是否启用代理

    static HttpProxy? proxy;
    static bool isProxy = false;

    static Future init() async {
    if (!kReleaseMode) {
    proxy ??= await HttpProxy.createHttpProxy();
    if (proxy!.host != null) {
    isProxy = true;
    }
    }
    }
    }

    3.Proxy使用

    DefaultHttpClientAdapter defaultHttpClientAdapter = DefaultHttpClientAdapter()
    ..onHttpClientCreate = (HttpClient client) {
    client.idleTimeout = const Duration(seconds: 5);
    if(Proxy.isProxy){
    client.findProxy = (uri) {
    return "PROXY ${Proxy.proxy?.host}:${Proxy.proxy?.port}";
    };
    //代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
    client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
    }
    return null;
    };

  • 相关阅读:
    竞赛常考的知识点大总结(七)图论
    Docker查看容器的初始启动命令参数的常见几种方式
    GRU简介
    TCP三次握手
    Java基础之数组、堆栈、变量、重载、权限修饰符、JavaBean、string、stringbuilder、ArrayList、泛型、单例设计模式
    探索数字安全的卓越之选 - Digicert证书
    python 星号(*) 还能这么用
    Go : const rotates恒定旋转(附完整源码)
    【python】OpenCV GUI——Mouse(14.1)
    云原生微服务 Spring Cloud Hystrix 降级、熔断实战应用
  • 原文地址:https://blog.csdn.net/hantian616/article/details/126285025