在众多抓包工具中,Charles 以其功能强大、界面直观而备受青睐。今天,我将带来一份详细的Charles抓包教程,不仅涵盖基础设置,更会深入讲解测试工作中最实用的高级功能。
一、 Charles简介与核心概念
Charles 是一个HTTP/HTTPS代理工具,它运行在您的电脑上。当我们将手机的网络代理设置为电脑时,手机所有的网络请求都会先流经Charles,再由Charles转发到目标服务器。因此,Charles就能作为"中间人"截获、记录并分析这些请求和响应。
核心概念:代理
• 代理地址: 运行Charles的电脑的IP地址。
• 代理端口: Charles监听的端口,默认为 8888。
二、 环境准备与安装
-
下载安装Charles:
◦ 访问Charles官网下载对应操作系统的版本。
◦ 安装过程非常简单,一路"下一步"即可。
-
首次启动与授权:
◦ 首次启动Charles,系统会提示是否授予它网络权限,务必选择"允许"。这是Charles能够截获网络流量的前提。
◦ Charles提供30天免费试用,免费版在每次启动时会等待30秒,但功能完整,不影响学习使用。
-
关键一步:获取电脑的IP地址
◦ macOS: 系统偏好设置 -> 网络 -> 查看IP地址。
◦ Windows: Win+R -> 输入 cmd -> 输入 ipconfig,查看"IPv4 地址"。
◦ 记下这个IP地址(如 192.168.1.10),稍后在手机设置中会用到。
三、 手机端配置(以iOS/Android为例)
确保手机和电脑在同一个局域网下(连接同一个Wi-Fi)。
- 安装Charles根证书(解决HTTPS乱码的关键)
这是最重要也最容易出错的一步。不安装证书,你只能看到HTTP请求,而HTTPS请求会显示为Unknown。
• 步骤1:在Charles中启用SSL代理
◦ 在Charles顶部菜单,选择 Proxy -> SSL Proxying Settings...。
◦ 勾选 Enable SSL Proxying。
◦ 在 Locations 部分,点击 Add。
◦ 在 Host 字段填 *(星号代表匹配所有域名),Port 字段填 443。
◦ 点击 OK 保存。这样Charles就准备好了为所有HTTPS网站进行代理。
• 步骤2:在手机上设置代理
◦ 进入手机的Wi-Fi设置,找到当前连接的Wi-Fi,点击进入详细设置。
◦ 将代理设置为手动。
◦ 服务器: 填写你在第二步中查到的电脑IP地址。
◦ 端口: 填写 8888。
◦ 保存。
• 步骤3:在手机上安装证书
◦ 此时,打开手机浏览器,访问 chls.pro/ssl。
◦ 系统会提示你下载一个描述文件(证书)。下载并安装它。
◦ iOS额外配置(至关重要!): 安装证书后,还需要进入 设置 -> 通用 -> 关于本机 -> 证书信任设置,找到刚刚安装的Charles Proxy证书,完全信任它。否则,在iOS 10.3+系统上,HTTPS解密依然会失败。
◦ Android额外配置: 同样需要确保证书被信任。路径可能因系统而异,通常在 设置 -> 安全 -> 加密与凭据 -> 安装的证书 中查看。
- 开始抓包
现在,打开手机上的任意APP,你应该能在Charles的界面中看到网络请求如瀑布般涌来。左侧是请求的域名结构,右侧是详细的请求和响应内容。
四、 必备的Charles高级用法
基础抓包只是开始,下面这些功能才是提升我们测试效率的利器。
- 精准过滤请求(Filter & Focus)
当测试一个大型APP时,瞬间产生的请求可能多达上百个,其中包含大量图片、统计上报、第三方SDK等"噪音"。如何快速找到我们关心的目标API?过滤功能是关键。
• 方法一:主界面动态过滤(推荐用于快速定位)
◦ 在Charles主界面左侧的Structure或Sequence视图的顶部,有一个Filter(过滤) 输入框。
◦ 在此输入框内键入关键词(如域名api.example.com或接口路径关键字/user/login),Charles会实时动态地只显示包含该关键词的请求。
◦ 优点: 快速、直观,无需修改配置。
◦ 缺点: 过滤是临时的,清除关键词后所有请求会重新显示。
• 方法二:录制设置静态过滤(推荐用于长时间测试)
◦ 点击顶部菜单 Proxy -> Recording Settings。
◦ 在 Include 标签页下,点击 Add。
◦ 在这里,你可以通过通配符精确配置只录制哪些请求。例如:
▪ 只抓取特定主机的请求:Host: *.myapp.com
▪ 只抓取特定路径的请求:Path: /api/v1/*
◦ 在 Exclude 标签页,可以排除某些干扰项(如常见的图片格式:*.jpg, *.png)。
◦ 优点: 从源头上避免录制无关请求,界面非常干净,节省系统资源。
◦ 缺点: 配置相对复杂,如果配置过严可能会漏掉一些意料之外的请求。
• 方法三:Focus功能(用于请求归类高亮)
◦ 在左侧Structure视图中,右键你关心的域名或请求,选择 Focus。
◦ 此时,被Focus的请求会正常显示,而其他所有请求会被归到一个名为 Other Hosts 的文件夹中。
◦ 优点: 非常适合对比、观察特定域名下的所有请求,结构清晰。
-
SSL代理解密(再看不懂HTTPS就OUT了)
完成上述证书安装后,你再查看类似 https://api.example.com 的请求,会发现内容不再是乱码,而是清晰的JSON或XML数据。你可以检查请求参数、响应头、状态码和返回体,这对于接口测试和调试至关重要。
-
断点调试(Breakpoints) - 拦截并修改请求/响应
模拟异常场景、测试边界值的利器!
• 在Charles左侧的请求结构图中,右键你关心的某个接口或域名。
• 选择 Breakpoints。
• 此后,任何匹配该条件的请求都会在发送前或被Charles接收后暂停。
• 此时,你可以:
◦ 修改请求: 在请求发送到服务器前,修改其参数(例如,将金额改为负数)。
◦ 修改响应: 在响应返回给手机APP前,修改其内容(例如,将成功状态改为失败,或返回一个超大的JSON测试APP兼容性)。
• 修改完成后,点击 Execute 继续。
- 弱网络模拟(Throttle Setting) - 测试APP在弱网下的表现
• 同样右键某个接口或域名,选择 Throttle Settings。
• 勾选 Enable Throttling。
• 在预设中可以模拟各种网络条件,如2G、3G,也可以自定义带宽、稳定性、丢包率等。
• 这对于测试APP的加载、超时、重试机制非常有帮助。
- 重发请求与接口调试(Compose)
• 右键任意一个历史请求记录,选择 Compose。
• 这会创建一个新标签页,你可以随意修改URL、请求头、参数。
• 点击执行,即可重发该请求。这对于前后端联调、快速验证接口不同入参的返回结果非常方便。
五、 常见问题与排查(踩坑总结)
-
手机连接不上Charles代理?
◦ 检查电脑防火墙是否关闭,或是否允许Charles通过。
◦ 确认手机和电脑在同一个Wi-Fi。
◦ 尝试在电脑上 ping 手机的IP地址,确保网络连通。
-
HTTPS请求仍然显示为Unknown?
◦ 99%的原因: 手机上的Charles根证书没有开启完全信任(尤其是iOS)。请严格按照教程第三步操作。
◦ 确认Charles的SSL代理设置中已添加 *:443。
-
设置过滤后,看不到任何请求?
◦ 检查过滤关键词是否拼写错误。
◦ 检查 Proxy -> Recording Settings 中的 Include 列表是否设置得过于严格,尝试暂时清空它。
◦ 确认 Proxy -> Windows Proxy 是勾选状态。
-
某些APP(如银行、支付类)抓不到包?
◦ 这些APP使用了证书绑定(SSL Pinning) 技术,会校验服务器证书是否与预期一致,从而拒绝Charles的"中间人"证书。
◦ 解决方案: 需要逆向修改APP的源码(对于测试来说,通常需要研发配合在测试包中关闭证书校验),或使用Postern、ProxyDroid等工具进行VPN级转发,配合Xposed/太极等框架绕过检测。
六、 总结
通过上述内容,你应该已经能够了解:
• ✅ 成功配置Charles并抓取手机的HTTP/HTTPS请求。
• ✅ 安装并信任证书,解密HTTPS流量。
• ✅ 使用过滤功能,精准定位目标请求。
• ✅ 使用断点功能修改请求和响应,进行深入测试。
• ✅ 模拟弱网络环境,测试APP的健壮性。
希望这篇教程对你有帮助!如果你有任何问题或心得,欢迎在评论区交流。