一.關於Charles的下載和配置可以參考Charles https 抓包
二.關於flutter dio設置代理
簡單說下幾種方式:
1.一種是運行的時候直接設置
首先在dio初始化後直接設置如下
void checkForCharlesProxy(Dio dio) {
const charlesIp =
String.fromEnvironment('CHARLES_PROXY_IP', defaultValue: null);
if (charlesIp == null) return;
debugPrint('#CharlesProxyEnabled');
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.findProxy = (uri) => "PROXY $charlesIp:8888;";
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
}
然後用命令行運行,ip換成自己的就可以了,例如
flutter run --dart-define=CHARLES_PROXY_IP=192.168.0.52
以上方法參照https://medium.com/netguru/how-to-connect-charles-proxy-with-dio-4443af7bbaa8,開發自己用挺好,但不方便給測試使用。
2.另外一種是利用第三方插件http_proxy
自動獲取手機的代理,然後dio創建後設置
代碼如下:
import 'package:http_proxy/http_proxy.dart';
void checkForCharlesProxy(Dio dio) async {
HttpProxy httpProxy = await HttpProxy.createHttpProxy();
var proxyHost = httpProxy.host;
var proxyPort = httpProxy.port;
if (proxyHost == null) return;
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.findProxy = (uri) => "PROXY $proxyHost:$proxyPort;";
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
}
目前測試過幾個手機,都能成功抓包,這樣給測試打的包也可以抓包了