本文最后更新于 2021年4月4日 晚上
这篇文章介绍如何在代码中对 dio 设置代理, 从而实现通过 Charles 等抓包工具来抓包.
Dio 代理设置
在正常情况下, 抓包工具是无法直接抓取 Flutter 应用的网络通信的, 如果需要在开发的时候抓取网络数据, 则可以显式设置 dio http 客户端代理, 代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
if (usingProxy && AppExecutionEnvironment.isDebug) { final adapter = _client.httpClientAdapter as DefaultHttpClientAdapter; adapter.onHttpClientCreate = (client) { client.findProxy = (uri) { return 'PROXY $localProxyIPAddress:$localProxyPort'; }; client.badCertificateCallback = (cert, host, port) => true; }; }
|
其中 AppExecutionEnvironment
定义如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class AppExecutionEnvironment { static final bool isDebug = () { bool isDebug = false; assert(() { isDebug = true; return true; }()); return isDebug; }();
static final bool isRelease = () { final isRelease = bool.fromEnvironment("dart.vm.product"); return isRelease; }();
static final bool isProfile = () { final isProfile = !isRelease && !isDebug; return isProfile; }();
static void debugDescription() { if (isDebug) { print('当前在 debug 配置下执行代码'); } else if (isRelease) { print('当前在 release 配置下执行代码'); } else { print('当前在其他配置模式下执行代码'); } } }
|
在工程内可以创建一个被 git 忽略的文件, 内容如下:
1 2 3 4 5 6 7 8 9 10 11 12
|
const usingProxy = false;
const localProxyIPAddress = '192.168.2.201';
const localProxyPort = 9999;
|