Charles对Flutter应用程序抓包

17 min read

dio 代理配置

import 'package:dio/adapter.dart';
import 'package:dio/dio.dart';


// 代理抓包设置
    // 在调试模式下需要抓包调试,所以我们使用代理,并禁用HTTPS证书校验
    if (_isDebug) {
      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
          (client) {
        // config the http client
        client.findProxy = (uri) {
          //proxy all request to 192.168.2.199:8888
          return 'PROXY 192.168.2.199:8888';
        };
        client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
        // you can also create a new HttpClient to dio
        // return HttpClient();
      };
    }

Charles设置

工具栏 Proxy > Proxy Settings > Proxies 获取代理地址端口

Android Studio 的全局代理配置

 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;
    };
  }

debug 配置项 选择 Edit Configurations > Additional run args

// flutter run --dart-define=CHARLES_PROXY_IP=192.168.0.52

--dart-define=CHARLES_PROXY_IP=192.168.0.52