用Charles进行手机APP抓包终极指南(含抓取网站过滤、HTTPS解密、断点、弱网模拟)

在众多抓包工具中,Charles 以其功能强大、界面直观而备受青睐。今天,我将带来一份详细的Charles抓包教程,不仅涵盖基础设置,更会深入讲解测试工作中最实用的高级功能。

一、 Charles简介与核心概念

Charles 是一个HTTP/HTTPS代理工具,它运行在您的电脑上。当我们将手机的网络代理设置为电脑时,手机所有的网络请求都会先流经Charles,再由Charles转发到目标服务器。因此,Charles就能作为"中间人"截获、记录并分析这些请求和响应。

核心概念:代理

• 代理地址: 运行Charles的电脑的IP地址。

• 代理端口: Charles监听的端口,默认为 8888。

二、 环境准备与安装

  1. 下载安装Charles:

    ◦ 访问Charles官网下载对应操作系统的版本。

    ◦ 安装过程非常简单,一路"下一步"即可。

  2. 首次启动与授权:

    ◦ 首次启动Charles,系统会提示是否授予它网络权限,务必选择"允许"。这是Charles能够截获网络流量的前提。

    ◦ Charles提供30天免费试用,免费版在每次启动时会等待30秒,但功能完整,不影响学习使用。

  3. 关键一步:获取电脑的IP地址

    ◦ macOS: 系统偏好设置 -> 网络 -> 查看IP地址。

    ◦ Windows: Win+R -> 输入 cmd -> 输入 ipconfig,查看"IPv4 地址"。

    ◦ 记下这个IP地址(如 192.168.1.10),稍后在手机设置中会用到。

三、 手机端配置(以iOS/Android为例)

确保手机和电脑在同一个局域网下(连接同一个Wi-Fi)。

  1. 安装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额外配置: 同样需要确保证书被信任。路径可能因系统而异,通常在 设置 -> 安全 -> 加密与凭据 -> 安装的证书 中查看。
  1. 开始抓包
    现在,打开手机上的任意APP,你应该能在Charles的界面中看到网络请求如瀑布般涌来。左侧是请求的域名结构,右侧是详细的请求和响应内容。

四、 必备的Charles高级用法

基础抓包只是开始,下面这些功能才是提升我们测试效率的利器。

  1. 精准过滤请求(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 的文件夹中。

◦ 优点: 非常适合对比、观察特定域名下的所有请求,结构清晰。
  1. SSL代理解密(再看不懂HTTPS就OUT了)

    完成上述证书安装后,你再查看类似 https://api.example.com 的请求,会发现内容不再是乱码,而是清晰的JSON或XML数据。你可以检查请求参数、响应头、状态码和返回体,这对于接口测试和调试至关重要。

  2. 断点调试(Breakpoints) - 拦截并修改请求/响应

    模拟异常场景、测试边界值的利器!

    • 在Charles左侧的请求结构图中,右键你关心的某个接口或域名。

• 选择 Breakpoints。

• 此后,任何匹配该条件的请求都会在发送前或被Charles接收后暂停。

• 此时,你可以:

复制代码
◦ 修改请求: 在请求发送到服务器前,修改其参数(例如,将金额改为负数)。

◦ 修改响应: 在响应返回给手机APP前,修改其内容(例如,将成功状态改为失败,或返回一个超大的JSON测试APP兼容性)。

• 修改完成后,点击 Execute 继续。

  1. 弱网络模拟(Throttle Setting) - 测试APP在弱网下的表现
    • 同样右键某个接口或域名,选择 Throttle Settings。

• 勾选 Enable Throttling。

• 在预设中可以模拟各种网络条件,如2G、3G,也可以自定义带宽、稳定性、丢包率等。

• 这对于测试APP的加载、超时、重试机制非常有帮助。

  1. 重发请求与接口调试(Compose)
    • 右键任意一个历史请求记录,选择 Compose。

• 这会创建一个新标签页,你可以随意修改URL、请求头、参数。

• 点击执行,即可重发该请求。这对于前后端联调、快速验证接口不同入参的返回结果非常方便。

五、 常见问题与排查(踩坑总结)

  1. 手机连接不上Charles代理?

    ◦ 检查电脑防火墙是否关闭,或是否允许Charles通过。

    ◦ 确认手机和电脑在同一个Wi-Fi。

    ◦ 尝试在电脑上 ping 手机的IP地址,确保网络连通。

  2. HTTPS请求仍然显示为Unknown?

    ◦ 99%的原因: 手机上的Charles根证书没有开启完全信任(尤其是iOS)。请严格按照教程第三步操作。

    ◦ 确认Charles的SSL代理设置中已添加 *:443。

  3. 设置过滤后,看不到任何请求?

    ◦ 检查过滤关键词是否拼写错误。

    ◦ 检查 Proxy -> Recording Settings 中的 Include 列表是否设置得过于严格,尝试暂时清空它。

    ◦ 确认 Proxy -> Windows Proxy 是勾选状态。

  4. 某些APP(如银行、支付类)抓不到包?

    ◦ 这些APP使用了证书绑定(SSL Pinning) 技术,会校验服务器证书是否与预期一致,从而拒绝Charles的"中间人"证书。

    ◦ 解决方案: 需要逆向修改APP的源码(对于测试来说,通常需要研发配合在测试包中关闭证书校验),或使用Postern、ProxyDroid等工具进行VPN级转发,配合Xposed/太极等框架绕过检测。

六、 总结

通过上述内容,你应该已经能够了解:

• ✅ 成功配置Charles并抓取手机的HTTP/HTTPS请求。

• ✅ 安装并信任证书,解密HTTPS流量。

• ✅ 使用过滤功能,精准定位目标请求。

• ✅ 使用断点功能修改请求和响应,进行深入测试。

• ✅ 模拟弱网络环境,测试APP的健壮性。

希望这篇教程对你有帮助!如果你有任何问题或心得,欢迎在评论区交流。

相关推荐
安然无虞15 小时前
LoadRunner性能测试详解·上
python·测试工具·压力测试
TechMasterPlus15 小时前
wireshark使用
网络·测试工具·wireshark
测试涛叔18 小时前
高频Postman软件测试面试题
测试工具·lua·postman
周周记笔记19 小时前
[元器件专题] RC充电电路(七)
嵌入式硬件·测试工具·硬件开发
想要成为祖国的花朵20 小时前
基于多设计模式的抽奖系统__测试报告
java·selenium·测试工具·jmeter·设计模式·测试用例·安全性测试
lakernote1 天前
别再纠结 Postman 和 Apifox 了!这款开源神器让 API 测试更简单
测试工具·开源·postman
程序员威子1 天前
最强平替Postman的工具,拒绝浏览器套壳
功能测试·selenium·测试工具·jmeter·单元测试·测试用例·postman
骑着蜗牛百米冲刺1 天前
Postman自动化测试自动填充token
测试工具·lua·postman
黑客-秋凌1 天前
接口测试工具(postman)
自动化测试·软件测试·测试工具·集成测试·lua·postman