Flutter抓包

Flutter抓包,第1张

如题,Flutter中的抓包跟普通的app抓包有点不太一样,抓不到。。。

 

Flutter无法抓包的问题根源:

Flutter 应用的网络请求是不走手机的系统代理的,也就是说你在系统设置中设置了代理地址和端口号后 Flutter 也不会走你的代理,而抓接口是必须要设置代理的。

 

其实有很多网友给出了抓包的设置和方法,基本上都是配置互联网共享的方式和修改代码的方式。我这里就着重说下代码修改的方式。

这里是我参考的资料:

https://blog.csdn.net/haha223545/article/details/91541452

https://zhuanlan.zhihu.com/p/26182135

https://juejin.cn/post/6844903733478817800

https://github.com/flutterchina/dio/issues/158

 

我的总结和方法:

1、手动添加手机的代理;

2、在网络库里面修改代码:

final Dio _dio = Dio();

/// 设置代理uri
void addProxyUri({String proxyIP, String proxyPort = "8888"}) {
  (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
    client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
    client.findProxy = (uri) {
      if (proxyIP == null || proxyIP.isEmpty) {
        return 'DIRECT';
      }
      return 'PROXY $proxyIP:$proxyPort';
    };
    return client;
  };
}

/// 添加监听时会调用代理
void addInterceptor(Interceptor interceptor) {
  _dio.interceptors.add(interceptor);
  addProxyUri(proxyIP: "192.168.0.145", proxyPort: "8888");
}

如代码所示,大致意思就是把用户配置的代理ip和代理端口拿到,设置,直接调用就行了。

调用addProxyUri(proxyIP: "192.168.0.145", proxyPort: "8888");设置你设定的代理ip和端口即可。

但是,需要着重注意下client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;这行配置,直接免去证书校验;

如果不加这一行,会报错:

I/flutter (27653): Ives dio err: DioError [DioErrorType.DEFAULT]: HandshakeException: Handshake error in client (OS Error:

I/flutter (27653): CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate chain(handshake.cc:354))

 

打开Charles抓取请求,如图:

 

结果显示可以愉快地玩耍了。

 

完毕。

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/997061.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存