Dio代理設(shè)置
在正常情況下, 抓包工具是無法直接抓取 Flutter 應(yīng)用的網(wǎng)絡(luò)通信的, 如果需要在開發(fā)的時候抓取網(wǎng)絡(luò)數(shù)據(jù), 則可以顯式設(shè)置 dio http 客戶端代理, 代碼如下所示:
// 在啟用代理的情況下, 且非 production 配置下的代理配置. (其中 usingProxy 是在外部的一個被忽略文件中定義)
if (usingProxy && AppExecutionEnvironment.isDebug) {
? final adapter = _client.httpClientAdapter as DefaultHttpClientAdapter;
? adapter.onHttpClientCreate = (client) {
? ? // 設(shè)置該客戶端的代理為指定的 ip:端口
? ? client.findProxy = (uri) {
? ? ? // localProxyIPAddress 和 localProxyPort 是在外部被忽略文件中定義, 方便各個開發(fā)者自行更改.
? ? ? return 'PROXY $localProxyIPAddress:$localProxyPort';
? ? };
? ? // 安卓機(jī)上面證書授權(quán):
? ? client.badCertificateCallback = (cert, host, port) => true;
? };
}
其中?AppExecutionEnvironment?定義如下:
classAppExecutionEnvironment{
/// 是否是在 debug 配置模式下
staticfinalboolisDebug = () {
boolisDebug =false;
assert(() {
isDebug =true;
returntrue;
? ? }());
returnisDebug;
? }();
/// 是否是在 release 配置模式下
staticfinalboolisRelease = () {
finalisRelease =bool.fromEnvironment("dart.vm.product");
returnisRelease;
? }();
/// 是否是在 profile 配置模式下
///
/// 實際可能還有其他配置, 都先歸入 profile 這里面, 日后再說.
staticfinalboolisProfile = () {
finalisProfile = !isRelease && !isDebug;
returnisProfile;
? }();
staticvoiddebugDescription() {
if(isDebug) {
print('當(dāng)前在 debug 配置下執(zhí)行代碼');
}elseif(isRelease) {
print('當(dāng)前在 release 配置下執(zhí)行代碼');
}else{
print('當(dāng)前在其他配置模式下執(zhí)行代碼');
? ? }
? }
}
在工程內(nèi)可以創(chuàng)建一個被 git 忽略的文件, 內(nèi)容如下:
// HTTP 代理設(shè)置 ------------------------------------------------------------
/// 是否啟用代理
const usingProxy = false;
/// 代理的 ip 地址
const localProxyIPAddress = '192.168.2.201';
/// 代理端口
const localProxyPort = 9999;
// -------------------------------------------------------------------------