flutter Charles 抓包動態獲取代理ip

一.關於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;
    };
  }

目前測試過幾個手機,都能成功抓包,這樣給測試打的包也可以抓包了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章