如果你是一名开发者、测试工程师或移动端调试人员,那么“抓包”这个词你一定不陌生。
而在所有抓包工具中,Charles 几乎是最常被提及的名字。
很多人知道它能“看到网络请求”但却不了解它为什么能看到、能看到什么、又不能看到什么。
今天,我们不只是讲“Charles怎么用”,而是带你彻底搞懂Charles抓包的原理、流程与技巧。
一、Charles抓包的本质是什么?
在操作系统层面,Charles其实是一个本地代理服务器(Proxy)。
它的工作原理可以概括为一句话:
“所有的网络请求,先经过Charles,再去目标服务器。”
Charles在这个过程中完成两件事:
- 拦截请求 — 读取HTTP/HTTPS请求内容;
- 转发请求 — 将请求转发给真实服务器,并将响应返回给客户端。
也就是说,当你在浏览器或App中发出请求时:
App → Charles (代理层) → 服务器
Charles就能“看到”整个过程的每一个细节。
二、Charles如何“破解”HTTPS加密流量?
很多人第一次使用Charles时会惊讶:
“HTTPS不是加密的吗?Charles怎么还能看到明文?”
这其实是因为Charles使用了 中间人代理(MITM)机制。
工作流程如下:
- 当客户端发起HTTPS请求时,Charles会伪装成目标网站;
- 它使用自己的证书(Charles Root CA)与客户端建立SSL连接;
- 然后再与目标服务器建立另一条真实SSL连接;
- Charles在两者之间“中转”并解密数据。
换句话说,Charles就像一个翻译员:
- 客户端以为它在和服务器说话,
- 服务器也以为它在和客户端说话,
- 实际上两边都在和Charles说话。
这就是为什么在首次使用Charles抓HTTPS时,我们必须安装并信任Charles的根证书。
三、Charles抓包的核心流程
当你打开Charles并开始抓包时,系统发生了以下几个步骤
| 阶段 | 描述 |
|---|---|
| 1. 系统代理设置 | Charles自动修改系统代理为本机地址(127.0.0.1:8888) |
| 2. 请求拦截 | 所有网络请求经由Charles中转 |
| 3. 数据解析 | Charles解析HTTP头、Body、参数、Cookies等 |
| 4. HTTPS解密(可选) | 通过SSL Proxying实现加密流量解密 |
| 5. 界面展示 | 请求在Structure或Sequence视图中可视化展示 |
这一流程解释了Charles为什么能“看见”你所有的网络交互。
四、Charles抓取手机App流量的原理
Charles之所以能抓手机端流量,也是因为它作为“代理服务器”存在。
当手机和电脑在同一Wi-Fi下时:
App (手机) → Charles(电脑) → 实际服务器
只要你在手机Wi-Fi设置中将代理改为电脑IP + 8888端口,Charles就能捕获App的所有HTTP/HTTPS流量。
但要注意,手机也必须安装并信任Charles证书, 否则HTTPS请求会被拦截失败。
这就是为什么很多人第一次抓App包时“什么都看不到”——因为没有正确信任Charles的根证书。
五、Charles抓包的高频使用场景
抓包不是目的,分析流量才是。
以下是开发者最常用的几种Charles抓包场景
场景一:调试接口请求
通过Charles查看:
- 请求路径、参数、Header、Body;
- 响应状态码与延迟;
- 不同环境接口差异。
示例:
调试登录接口时发现请求被重定向到旧版本API,通过Rewrite快速修改路径 /v1/login → /v2/login 即可验证修复。
场景二:模拟异常响应
使用 Breakpoints 功能拦截请求,手动修改返回值,模拟服务器错误。
例如:
将 "status":200 改为 "status":500",测试前端异常处理逻辑是否正确。
场景三:Mock接口响应
通过 Map Local 功能将接口映射到本地JSON文件。
适用于:
- 后端接口未开发完成;
- 前端独立调试UI。
场景四:模拟网络环境
使用 Throttle 限制带宽与延迟,例如模拟“3G弱网”测试App加载性能。
场景五:Bug复现与协作
测试导出 .chls 文件(抓包日志),开发导入Charles即可100%重现问题。
六、Charles抓包常见问题与解决思路
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 抓不到HTTPS | 证书未信任 | 重新安装证书并设为“始终信任” |
| 手机抓不到包 | 不同Wi-Fi / IP错误 | 手机和电脑需在同一网络 |
| 请求乱码 | 内容被压缩 | 启用“Decode compressed content”选项 |
| App拒绝连接 | 开启SSL Pinning | 使用测试包或绕过证书验证 |
七、Charles高阶抓包技巧
| 功能 | 应用价值 | 举例 |
|---|---|---|
| Map Remote | 快速切换环境 | 将 api.dev.com 映射到 api.test.com |
| Repeat & Advanced Repeat | 接口性能与压力测试 | 重放请求测试响应时间 |
| Session Filter | 快速筛选目标请求 | 按关键词或域名过滤 |
| Blacklist | 屏蔽无关请求 | 忽略广告或监控接口 |
| Rewrite规则组 | 自动化测试 | 动态替换Header与响应体 |
八、推荐中文学习资源
更多详细的图文教程与配置示例Charles国内中文网:charlesproxy.net/
提供:
- Charles安装包与中文版教程;
- 移动端抓包图解指南;
- Rewrite与Throttle高级配置案例;
- 常见问题排查文档。
很多人以为“抓包”只是调试工具,其实,它是系统认知的入门课。
当你能看清数据的流动、延迟、重定向与异常,你就不再只是一个写代码的人,而是一个能理解系统运行机制的开发者