Charles Proxy — 介绍、设置和拦截HTTPS流量

作者: IT Sectr 发布日期: 2026-05-08 阅读时间: 8 分钟

Charles Proxy是一款跨平台代理服务器,用于调试HTTP/HTTPS流量,开发人员使用它来拦截、查看和修改网络请求。据工具创建者Karl von Randow(2025年)介绍,自2004年以来,全球已有超过50,000家公司使用Charles。代理支持通过WiFi拦截来自移动设备的流量、通过安装根证书进行HTTPS代理以及广泛的API分析工具集。

要点

  • Charles Proxy — 用于拦截和分析网络流量的HTTP/HTTPS代理服务器,具有高级调试功能
  • HTTPS代理通过在设备上安装Charles根证书实现,允许查看加密流量
  • Rewrite和Breakpoints — 无需更改服务器或客户端代码即可即时修改请求和响应的强大工具
  • Map Local和Map Remote允许将网络资源替换为本地文件或备用服务器以进行测试
  • Throttle — 模拟慢速和不稳定的网络连接,以测试应用在弱连接条件下的行为

什么是Charles Proxy?

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 Proxy的工作原理

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模拟器的自动代理配置。

xml
<!-- 为具有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的主要功能

Charles Proxy提供了一套专业的工具用于分析和修改流量,远远超出了简单的请求拦截。

Rewrite和Breakpoints

Rewrite工具允许自动修改请求或响应的特定部分:标头、URL参数、响应体。例如,您可以将User-Agent标头替换为其他设备的值,或删除特定的cookie。Breakpoints像调试器一样工作:请求在选定阶段(发送前或接收前)暂停,开发人员可以在其继续之前手动修改其内容。这对于测试错误响应处理或非标准状态非常有用。

Map Local和Map Remote

Map Local允许将网络资源(CSS、JS、JSON)替换为磁盘上的本地文件。这在前端开发中不可或缺:您可以修改CSS/JS并立即看到结果,而无需部署到服务器。Map Remote将请求从一个URL重定向到另一个URL——例如,从生产服务器重定向到staging进行测试。这两种工具都使用支持通配符的URL模式工作。

Throttle和网络条件模拟

Throttle工具允许根据预设配置文件模拟各种类型的网络连接:3G、EDGE、GPRS、DSL、WiFi。您可以配置速度限制(下载/上传)、延迟、数据包丢失和稳定性。这对于测试应用在慢速或不稳定连接下的行为至关重要——正确处理超时、重试、离线模式。

配置下载上传延迟典型场景
3G780 kbps330 kbps200 ms移动信号弱时测试
EDGE130 kbps50 kbps400 ms极慢连接
GPRS50 kbps20 kbps500 ms最低可能连接
DSL2 Mbps256 kbps50 ms家庭有线连接
WiFi10 Mbps10 Mbps10 ms良好的WiFi连接

自动保存和录制

Charles可以自动保存流量会话到.chls文件,允许稍后分析或与同事共享。Recording Control允许灵活配置要保存的流量:按域、内容类型、状态码。这对于API的长期监控非常方便。

为移动设备设置Charles Proxy

要调试移动应用的流量,Charles被配置为WiFi代理:与计算机在同一网络中的所有设备都可以通过Charles路由流量。正确的HTTPS设置需要在移动设备上安装Charles证书。

在Android上设置

对于Android:打开设置 → WiFi → 高级 → 代理,选择手动并输入计算机的IP地址和端口8888。然后在设备上打开浏览器,访问http://chls.pro/ssl下载Charles证书。在Android 7+(API 24+)上,需要在Debug构建中使用network_security_config.xml来信任用户证书——否则应用可能不会通过Charles路由流量。

在iOS上设置

对于iOS:设置 → WiFi → 配置代理为IP和端口8888。然后Safari → http://chls.pro/ssl → 安装证书配置文件。在iOS 10.3+上,您需要启用证书信任:设置 → 通用 → 关于 → 证书信任设置 → 启用Charles Proxy。iOS对证书更严格:某些应用可能使用SSL Pinning,即使使用受信任的证书也会阻止通过Charles的流量。

解决SSL Pinning问题

如果应用使用SSL Pinning(服务器证书固定),通过Charles的标准代理将无法工作——应用将拒绝Charles证书。解决方案:通过OkHttp或URLSession设置在Debug构建中禁用SSL Pinning,使用Frida在运行时绕过固定,或使用具有root访问权限的Android模拟器。

Charles Proxy的实用场景

Charles Proxy解决特定的开发和测试任务。让我们看看该工具不可或缺的最常见场景。

调试API集成

最常见的场景——检查API请求的正确性。Charles显示确切的请求URL、标头、主体、参数。如果服务器返回意外响应,立即可以看到:JSON结构、错误代码、响应标头。这使得无需双方向的日志即可区分客户端错误和服务器端错误。

使用慢速连接进行测试

使用Throttle配置文件,您可以测试应用在低连接速度下的行为:是否显示加载指示器、是否正确处理超时、UI是否在连接丢失时冻结。缓存测试尤其重要——如果数据已经加载,应用应从缓存中显示它们,而不是进入无限加载。

编辑服务器响应

使用Breakpoints,您可以在服务器响应发送到应用之前修改它。例如,返回空数组而不是数据,将状态码更改为500,向JSON添加新字段。这允许在不修改服务器代码的情况下测试边缘情况处理——Charles在移动开发中最强大的应用之一。

常见问题

Charles Proxy是免费的吗?

Charles Proxy是商业产品,提供30天试用期。试用期结束后,程序每次启动时会有30分钟的中断后继续工作。许可费用为每份50美元。存在免费替代品,如Proxyman(macOS)和mitmproxy(跨平台)。

能否拦截iOS模拟器的流量?

是的,iOS模拟器自动使用macOS系统代理。只需启动Charles并启用SSL代理——模拟器的所有流量都将被拦截。模拟器的证书设置自动进行,您只需要信任macOS钥匙串中的Charles证书即可。

Charles和Proxyman有什么区别?

主要区别:Charles是跨平台的(Windows、macOS、Linux),Proxyman——仅限macOS和iOS。Charles拥有更广泛的工具集(Rewrite、Map Local、Repeat、Auto Save),但是付费的。Proxyman基本功能免费,具有现代化的界面和与iOS模拟器的原生集成。

Charles Proxy如何影响性能?

当流量通过代理时,Charles会增加延迟,特别是在活动SSL代理(解密/加密)时。在现代计算机上,每个请求的延迟为5–15毫秒。对于性能测试,建议通过Recording Control禁用静态资源(CSS、JS、图像)的SSL代理。

如何从Charles导出会话?

Charles支持导出为格式:.chls(原生格式,用于在Charles中重新打开)、HAR(HTTP Archive,可在浏览器和其他工具中打开)、CSV(用于在Excel或电子表格中处理)、Trace(用于以curl兼容格式导出特定请求)。通过File → Export Session菜单导出。

总结

  • Charles Proxy — 自2004年以来用于拦截、查看和修改网络流量的专业HTTP/HTTPS代理服务器
  • 工作原理 — MITM代理:所有请求都通过Charles,允许即时分析和修改
  • 强大工具:Rewrite、Breakpoints、Map Local、Map Remote、Throttle — 用于全面的API调试和用户体验测试
  • HTTPS代理需要在设备上安装Charles根证书,对于Android 7+还需要在Debug构建中使用network_security_config.xml
  • Throttle配置文件允许模拟3G、EDGE、DSL和其他类型的连接,以测试应用在真实条件下的行为
  • 会话导出为HAR、CSV和.chls格式,用于分析、报告和与团队共享
  • 对于预算有限的项目,请考虑免费替代品:Proxyman(macOS)或mitmproxy(跨平台开源)

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读