Charles Proxy是一款跨平台代理服务器,用于调试HTTP/HTTPS流量,开发人员使用它来拦截、查看和修改网络请求。据工具创建者Karl von Randow(2025年)介绍,自2004年以来,全球已有超过50,000家公司使用Charles。代理支持通过WiFi拦截来自移动设备的流量、通过安装根证书进行HTTPS代理以及广泛的API分析工具集。
要点
Charles Proxy是一个HTTP代理和HTTP监视器,充当客户端和服务器之间的中介。所有请求和响应都通过Charles,允许查看其内容、分析结构、实时修改数据以及模拟各种网络条件。适用于Windows、macOS和Linux。
Charles Proxy由Karl von Randow于2004年创建,至今仍是调试网络流量最受欢迎的工具之一。与免费替代品不同,Charles提供付费许可,带有30天试用期。该工具定位为移动应用开发者、Web开发人员和QA工程师的专业解决方案,他们需要对HTTP通信进行完全控制。
Charles作为计算机上的系统代理工作,可以拦截同一网络中任何设备的流量:Android、iOS、模拟器、仿真器、Web浏览器和IoT设备。要拦截HTTPS流量,需要在每个设备上安装Charles根证书。流量支持HTTP/1.1和部分HTTP/2。HTTP/3(QUIC)在拦截级别不受支持。
Charles基于MITM(中间人)代理原理工作:当客户端通过Charles发送请求时,该工具拦截此请求,将其转发到目标服务器,接收响应并将其返回给客户端。所有流量都通过Charles,允许对其进行分析和修改。
启动时,Charles在端口8888(默认)上创建一个本地HTTP代理。操作系统或应用程序被配置为使用此代理。所有HTTP请求首先发送到Charles,然后它充当目标服务器的完整客户端。对于HTTPS,Charles使用自己的SSL代理技术:它为每个域动态生成证书,由Charles根证书签名。如果根证书作为受信任证书安装在设备上,Charles可以解密和查看HTTPS流量。
Charles支持两种模式:Proxy(经典代理服务器)和SOCKS Proxy(用于UDP和TCP流量)。对于Web开发,使用标准HTTP代理。对于移动设备——在设备上配置WiFi代理,指定运行Charles的计算机IP地址。MacOS支持iOS模拟器的自动代理配置。
<!-- 为具有Charles支持的Android配置network_security_config.xml -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- 在Debug构建中信任Charles证书 -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy提供了一套专业的工具用于分析和修改流量,远远超出了简单的请求拦截。
Rewrite工具允许自动修改请求或响应的特定部分:标头、URL参数、响应体。例如,您可以将User-Agent标头替换为其他设备的值,或删除特定的cookie。Breakpoints像调试器一样工作:请求在选定阶段(发送前或接收前)暂停,开发人员可以在其继续之前手动修改其内容。这对于测试错误响应处理或非标准状态非常有用。
Map Local允许将网络资源(CSS、JS、JSON)替换为磁盘上的本地文件。这在前端开发中不可或缺:您可以修改CSS/JS并立即看到结果,而无需部署到服务器。Map Remote将请求从一个URL重定向到另一个URL——例如,从生产服务器重定向到staging进行测试。这两种工具都使用支持通配符的URL模式工作。
Throttle工具允许根据预设配置文件模拟各种类型的网络连接:3G、EDGE、GPRS、DSL、WiFi。您可以配置速度限制(下载/上传)、延迟、数据包丢失和稳定性。这对于测试应用在慢速或不稳定连接下的行为至关重要——正确处理超时、重试、离线模式。
| 配置 | 下载 | 上传 | 延迟 | 典型场景 |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | 移动信号弱时测试 |
| EDGE | 130 kbps | 50 kbps | 400 ms | 极慢连接 |
| GPRS | 50 kbps | 20 kbps | 500 ms | 最低可能连接 |
| DSL | 2 Mbps | 256 kbps | 50 ms | 家庭有线连接 |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | 良好的WiFi连接 |
Charles可以自动保存流量会话到.chls文件,允许稍后分析或与同事共享。Recording Control允许灵活配置要保存的流量:按域、内容类型、状态码。这对于API的长期监控非常方便。
要调试移动应用的流量,Charles被配置为WiFi代理:与计算机在同一网络中的所有设备都可以通过Charles路由流量。正确的HTTPS设置需要在移动设备上安装Charles证书。
对于Android:打开设置 → WiFi → 高级 → 代理,选择手动并输入计算机的IP地址和端口8888。然后在设备上打开浏览器,访问http://chls.pro/ssl下载Charles证书。在Android 7+(API 24+)上,需要在Debug构建中使用network_security_config.xml来信任用户证书——否则应用可能不会通过Charles路由流量。
对于iOS:设置 → WiFi → 配置代理为IP和端口8888。然后Safari → http://chls.pro/ssl → 安装证书配置文件。在iOS 10.3+上,您需要启用证书信任:设置 → 通用 → 关于 → 证书信任设置 → 启用Charles Proxy。iOS对证书更严格:某些应用可能使用SSL Pinning,即使使用受信任的证书也会阻止通过Charles的流量。
如果应用使用SSL Pinning(服务器证书固定),通过Charles的标准代理将无法工作——应用将拒绝Charles证书。解决方案:通过OkHttp或URLSession设置在Debug构建中禁用SSL Pinning,使用Frida在运行时绕过固定,或使用具有root访问权限的Android模拟器。
Charles Proxy解决特定的开发和测试任务。让我们看看该工具不可或缺的最常见场景。
最常见的场景——检查API请求的正确性。Charles显示确切的请求URL、标头、主体、参数。如果服务器返回意外响应,立即可以看到:JSON结构、错误代码、响应标头。这使得无需双方向的日志即可区分客户端错误和服务器端错误。
使用Throttle配置文件,您可以测试应用在低连接速度下的行为:是否显示加载指示器、是否正确处理超时、UI是否在连接丢失时冻结。缓存测试尤其重要——如果数据已经加载,应用应从缓存中显示它们,而不是进入无限加载。
使用Breakpoints,您可以在服务器响应发送到应用之前修改它。例如,返回空数组而不是数据,将状态码更改为500,向JSON添加新字段。这允许在不修改服务器代码的情况下测试边缘情况处理——Charles在移动开发中最强大的应用之一。
常见问题
Charles Proxy是商业产品,提供30天试用期。试用期结束后,程序每次启动时会有30分钟的中断后继续工作。许可费用为每份50美元。存在免费替代品,如Proxyman(macOS)和mitmproxy(跨平台)。
是的,iOS模拟器自动使用macOS系统代理。只需启动Charles并启用SSL代理——模拟器的所有流量都将被拦截。模拟器的证书设置自动进行,您只需要信任macOS钥匙串中的Charles证书即可。
主要区别:Charles是跨平台的(Windows、macOS、Linux),Proxyman——仅限macOS和iOS。Charles拥有更广泛的工具集(Rewrite、Map Local、Repeat、Auto Save),但是付费的。Proxyman基本功能免费,具有现代化的界面和与iOS模拟器的原生集成。
当流量通过代理时,Charles会增加延迟,特别是在活动SSL代理(解密/加密)时。在现代计算机上,每个请求的延迟为5–15毫秒。对于性能测试,建议通过Recording Control禁用静态资源(CSS、JS、图像)的SSL代理。
Charles支持导出为格式:.chls(原生格式,用于在Charles中重新打开)、HAR(HTTP Archive,可在浏览器和其他工具中打开)、CSV(用于在Excel或电子表格中处理)、Trace(用于以curl兼容格式导出特定请求)。通过File → Export Session菜单导出。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。