近期工作中发现Flutter框架下的APP使用fiddler/Charles无法直接抓包进行测试了。
具体原因可参考文章:https://juejin.im/post/5c85f504e51d4510a06d3f0a
附:文中Flutter相关源码:
https://github.com/dart-lang/sdk/blob/master/sdk/lib/_http/http_impl.dart
结论:
1.Flutter中是允许使用代理模式的。
2.Flutter中默认的代理环境为空。
对应的解决方法如下:
-
方法一:代码中启用代理:
代码中启用Proxy,允许第三方工具通过代理形式抓包分析。
我们使用了Flutter推荐的dio网络请求框架,因此根据dio的GitHub文档说明
Using proxy
DefaultHttpClientAdapter provide a callback to set proxy to dart:io:HttpClient, for example:
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
// config the http client
client.findProxy = (uri) {
//proxy all request to localhost:8888
return "PROXY localhost:8888";
};
// you can also create a new HttpClient to dio
// return new HttpClient();
};
*建议仅测试版本的APP中开启此功能,降低安全风险
-
方法二:使用Drony工具
此方法需在DronyAPP中设置代理的相关信息。
-
方法三:Wireshark
只要选对网卡,没有什么数据是Wireshark抓不到的。只要写清楚过滤规则,不管是否走代理模式,均可抓到Flutter框架内的网络请求。