浏览器与系统配置
任何浏览器(或应用程序)要使用Charles,都必须将其配置为使用Charles作为代理服务器。大多数浏览器支持手动配置,但这种方式较为繁琐,因为每次启动或停止Charles时都需要重复配置。
幸运的是,Charles在多数情况下支持自动代理配置,包括:
- Windows/Internet Explorer代理设置——多数Windows应用程序会自动应用此配置
- macOS系统代理设置——多数macOS应用程序会自动应用此配置
- Mozilla Firefox代理设置(全平台适用)
Windows代理设置
Charles可自动配置Windows代理设置,使IE及其他Windows应用程序自动启用Charles。默认情况下,Charles会在启动或退出时自动调整这些设置。
如需修改代理配置行为,可在Charles的Proxy菜单中的Proxy Settings对话框进行调整。
用户也可通过控制面板的Internet选项中的"连接"标签页查看Windows代理设置。
Microsoft Edge需额外设置:在地址栏输入about:flags并启用"Allow localhost loopback",否则无法连接运行于本地的Charles代理。
macOS代理设置
Charles可自动配置macOS系统代理,使Safari等应用程序自动启用Charles。
首次安装时会提示授予Charles代理配置权限。此后每次启动/退出Charles时都会自动调整系统代理设置。
配置行为可通过Proxy菜单中的Proxy Settings对话框修改。
用户可在系统设置的"网络"高级选项中查看macOS代理配置。
注意:若要通过Safari使用HTTP/2协议,需将Charles切换至SOCKS模式。
iOS设备设置
在iPhone上需手动配置WiFi网络的HTTP代理:进入设置→Wi-Fi→点击当前网络→HTTP Proxy选择手动→输入运行Charles的电脑IP(服务器字段)及端口(通常8888),认证保持关闭。
首次连接时Charles会弹出权限请求,允许后设备IP将加入Proxy菜单的Access Control列表。
停止使用Charles时请务必关闭代理设置,否则会导致网络异常!
自动配置
可输入自动配置URL实现智能回退(实验性功能):
https://chls.pro/X.X.X.X.pac
将X.X.X.X替换为电脑IP(默认8888端口,其他端口需完整填写如X.X.X.X:XXXX)。
iOS还支持通过以下URL启用SOCKS代理(尽管系统不提供手动选项):
https://chls.pro/X.X.X.X:XXXX.socks.pac
HTTP/2支持
iOS 10的Safari不支持通过HTTP代理使用HTTP/2,需改用SOCKS模式并配置上述自动代理URL。
iOS模拟器
默认使用系统代理设置,若失效请重启模拟器。从Xcode 6开始建议先启动Charles并设置系统代理再运行模拟器。
Mozilla Firefox代理设置
推荐使用系统代理设置:进入首选项→高级→网络→连接→设置→选择"使用系统代理设置"。
手动代理配置
在Charles的Proxy Settings中查看HTTP/SOCKS代理端口,然后在目标应用中配置代理地址为127.0.0.1(本机)或电脑外网IP。
Java应用程序配置
通过代码或命令行参数配置:
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
HTTPS需额外配置(可能需要信任Charles根证书,参见SSL代理):
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8888");
更多细节参考:官方文档,或用户提供的集成教程和Play框架集成指南。
cURL与libcurl
命令行使用:
curl --proxy localhost:8888
代码配置:
curl_easy_setopt(pCurl, CURLOPT_PROXY, "127.0.0.1");
curl_easy_setopt(pCurl, CURLOPT_PROXYPORT, 8888);
开发阶段可临时关闭SSL验证:
curl_easy_setopt(pCurl, CURLOPT_SSL_VERIFYPEER, 0);
Android模拟器
在运行配置中添加模拟器参数:
-http-proxy http://10.0.2.2:8888
其中10.0.2.2是模拟器访问宿主机的专用地址,若Charles运行在其他电脑需替换对应IP。
Android设备
部分设备支持HTTP代理设置(如Nexus S需通过语音拨号说"proxy"调出,三星设备可长按WiFi网络配置)。
测试时也可硬编码代理:
HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);
或
HttpUrlConnection conn = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.101", 8888)));
注意替换为运行Charles的电脑IP地址。