Charles 是前端常用的代理抓包工具,可以拦截和修改 HTTP/HTTPS 请求,对于调试网络接口、排查请求问题具有重要价值。
2024-2026 更新:除了 Charles,还有以下替代方案:
- Proxyman(macOS 原生,体验更好)
- Chrome DevTools Network Override(无需安装代理工具)
- mitmproxy(命令行,适合自动化)
HTTPS 使用 TLS 加密通信,中间人只能看到加密数据。Charles 通过"中间人代理"实现 HTTPS 抓包:
关键步骤:浏览器必须信任 Charles 的根证书,否则 HTTPS 请求会提示不安全。
*.juejin.cn 或 * 代表全部)点击 Proxy → macOS Proxy,Charles 会设为系统代理,所有 HTTP/HTTPS 请求自动经过 Charles。
2024-2026 更新:SwitchyOmega 正在迁移到 Manifest V3。也可以使用 Chrome DevTools 的 Local Overrides 作为替代。
127.0.0.1:8888)拦截请求/响应,修改后继续发送:
用本地文件替换线上资源,是应用最广泛的功能之一:
典型场景:将线上的 JS/CSS 文件映射到本地刚打包的文件,实现线上环境调试本地代码。
将请求转发到另一个 URL:
https://api.example.com/v1/* → https://api-test.example.com/v1/*批量修改请求/响应的各种数据:
模拟慢速网络环境:
类似修改 hosts 文件,但只对 HTTP/HTTPS 请求生效:
www.test.com → 127.0.0.1自动为请求添加 Cache-Control: no-cache Header。
移除请求中的 Cookie 和响应中的 Set-Cookie。
将响应内容保存到本地文件,配合 Map Local 使用。
手动构造 HTTP 请求发送,类似 Postman:
Charles 抓包后再转发给其他代理(如科学上网代理),解决同时需要抓包和代理访问的问题。
通过浏览器远程控制 Charles 的功能开关。
根据条件为请求设置颜色标记,如所有含 Set-Cookie 的请求标为黄色。
2024-2026 新增:Chrome DevTools 的 Network 面板支持 Local Overrides,可以替代 Charles 的 Map Local 功能:
优点:不需要安装代理工具,直接在浏览器中修改响应。 缺点:只支持响应修改,不支持请求修改;不支持 HTTPS 中间人。
macOS 上的替代方案,原生体验更好,UI 更现代,支持 iOS 模拟器调试。
命令行代理工具,适合自动化场景:
# 安装
pip install mitmproxy
# 启动代理
mitmproxy --listen-port 8080
# 用 Python 脚本自动修改请求
mitmproxy -s modify_requests.py移动端 HTTPS 调试原理与 PC 端相同,需要在手机上安装 Charles 证书:
chls.pro/ssl 下载证书2024-2026 注意:Android 7+ 默认不信任用户安装的证书,只信任系统证书。需要 Root 或使用调试包才能抓 HTTPS。