You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter配置代理仅iOS模拟器生效 真机无法捕获Charles流量如何解决?

第一步 完成iOS项目原生基础配置
  • 关闭iOS ATS限制,在项目ios/Runner/Info.plist的根dict节点下添加如下配置:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
  • 给真机安装并信任Charles根证书:手机和电脑连接同一WiFi,手动设置手机当前WiFi的代理为电脑局域网IP+Charles默认端口8888,手机 Safari 访问chls.pro/ssl下载证书,依次进入「设置-通用-VPN与设备管理」信任安装的Charles证书,再进入「设置-通用-关于本机-证书信任设置」开启Charles证书的完全信任权限。
  • 打开Charles的远程连接权限:进入Charles顶部菜单 Proxy -> Proxy Settings -> Proxies 标签页,勾选Allow remote connections选项,避免真机连接被拦截。
第二步 修改Flutter侧代理适配代码

原有硬编码代理IP的方案仅适用于模拟器(模拟器和电脑共享回环网络),真机需要改为动态读取系统代理配置,不要写死IP地址:

// 原生HttpClient适配方案
HttpClient createProxyHttpClient() {
  final client = HttpClient();
  client.findProxy = (uri) {
    // 本地调试接口可跳过代理
    if (uri.host == '127.0.0.1' || uri.host == 'localhost') {
      return 'DIRECT';
    }
    // 自动读取系统配置的代理,无需硬写IP
    return HttpClient.findProxyFromEnvironment(uri, environment: {});
  };
  // 调试阶段关闭证书校验,避免Charles自签证书导致请求失败
  client.badCertificateCallback = (cert, host, port) => true;
  return client;
}

如果使用Dio等第三方网络库,同步修改对应配置即可:

final dio = Dio();
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
  client.findProxy = (uri) {
    if (uri.host == '127.0.0.1' || uri.host == 'localhost') {
      return 'DIRECT';
    }
    return HttpClient.findProxyFromEnvironment(uri, environment: {});
  };
  client.badCertificateCallback = (cert, host, port) => true;
  return client;
};
第三步 运行验证

重新编译Flutter项目安装到真机,发起网络请求即可在Charles中捕获到对应流量。

内容的提问来源于stack exchange,提问作者Hayden Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:08