Charles抓包工具:跨端刚需的90%高频使用指南
Windows开发者可能最先想到Fiddler,但Charles才是Win/Mac/Linux全平台通吃、GUI清爽不臃肿、覆盖Web端+移动端全调试场景的「网络排雷万金油」——前端改接口不用切环境、移动端测异常不用改代码发包、后端查参数串改不用翻设备日志。
本文避开花里胡哨的小众功能,只讲10分钟能搭好环境、日常开发测试必用的核心配置与技巧,看完你就能直接上手解决问题。
一、基础配置检查:先搭「能走的路」
刚安装打开Charles,别急着折腾SSL证书或手机,先确认2个默认基石配置,避免后期踩坑:
1.1 HTTP代理端口
Charles默认会开启HTTP/HTTPS流量的监听端口,只要没冲突,不用改默认值:
👉 查看/修改路径:顶部菜单栏 → Proxy → Proxy Settings → Proxies 标签页
二、HTTPS解密配置:Charles的「灵魂」
没解密的HTTPS流量,在Charles里全是灰绿色的乱码二进制流,什么接口、参数、响应都看不到——这一步是必须的「硬配置」。
2.1 Charles端(PC)操作
① 开启全局/指定SSL代理
抓生产环境要注意隐私(只抓核心接口),测试/学习环境可以用通配符抓所有:
👉 查看/修改路径:顶部菜单栏 → Proxy → SSL Proxying Settings
② 安装并信任Charles根证书(本地)
解密的原理是「中间人劫持→Charles签发子证书→本地信任Charles根证书」,所以必须让PC和调试设备都信任它:
- MacOS:
Help→SSL Proxying→Install Charles Root Certificate→ 打开「钥匙串访问」→ 搜索Charles Proxy CA→ 右键→显示简介→信任→把「使用此证书时」改成「始终信任」 - Windows:
Help→SSL Proxying→Install Charles Root Certificate→ 选「本地计算机」→下一步→将所有证书放入下列存储→浏览→受信任的根证书颁发机构→确定→完成 - Linux(Ubuntu):
Help→SSL Proxying→Save Charles Root Certificate→存为.pem→移动到/usr/local/share/ca-certificates/→执行sudo update-ca-certificates
2.2 调试设备端(手机/平板)操作
⚠️ 核心前提:手机和Charles的PC必须在同一个无隔离的局域网(比如都连家里/公司的同个WiFi,不能连员工WiFi+内部专线这种组合)
Android设备通用步骤
⚠️ Android 7.0(API 24)+ 的坑:默认不信任用户安装的证书!如果是自己写的测试App,要在res/xml/network_security_config.xml里加信任配置;如果是浏览器/第三方公开App,部分厂商(小米、OPPO等)可能需要手动开启「信任用户证书用于VPN和应用」。
- 查PC局域网IP:Mac用
ifconfig找en0(WiFi)下的inet;Windows用ipconfig找「无线局域网适配器WLAN」下的「IPv4地址」 - 配手机WiFi代理:长按已连WiFi→
修改网络→高级选项→代理手动→填PC IP和8888端口→保存 - 装手机端根证书:手机浏览器访问
chls.pro/ssl→下载证书→按提示安装(Android 11+选「CA证书」)
iOS设备通用步骤
iOS的信任步骤比Android多一步,但更统一规范:
- 同Android的「查IP→配WiFi代理」
- 装描述文件:Safari访问
chls.pro/ssl→下载→允许→iPhone→关闭 - 激活并信任证书(这一步必做!):
- 激活:
设置→通用→VPN与设备管理→找到Charles Proxy CA→安装→输锁屏密码 - 全局信任:
设置→通用→关于本机→滑到底找证书信任设置→打开Charles Proxy CA的开关→点继续
- 激活:
三、90%高频功能:学会就能排雷
环境搭好后,这几个功能是每天都会用到的,熟练掌握就能解决大部分网络问题。
3.1 流量过滤:别被无关流量淹没
Charles默认抓所有流量——手机一开微信/浏览器,左侧列表瞬间飘成瀑布流,这时候必须过滤。
临时搜索过滤
最简单的方式,直接在Charles主界面顶部的白色「Filter」搜索栏输入关键词:
- 可以搜域名(如
api.example) - 可以搜接口路径(如
/user/info) - 可以搜请求/响应参数值(如
id=123) - 支持模糊匹配,实时生效
永久Focus过滤
如果只关注固定几个域名,可以把它们设为「核心聚焦」:
- 在左侧「Structure」树形视图下,右键点击目标域名
- 选择「Focus」
- 其他未聚焦的域名会自动折叠到下方的「Other Hosts」灰色文件夹里,完全不干扰视线
3.2 断点调试:实时篡改请求/响应
断点调试是Charles最「硬核」的实用功能——不用改一行代码、不用重启服务、不用重新打包,就能测试各种边界场景:
配置断点的2种方式
-
临时单条请求断点:最快的调试方式
- 在「Structure」或「Sequence」时序视图下,找到已抓取的目标请求
- 右键→选「Breakpoints」
- 重新发起该请求,就会被Charles拦截
-
批量规则断点:适合拦截同类型的所有请求 👉 路径:
Proxy→Breakpoints Settings→勾选「Enable Breakpoints」→点击「Add」
断点调试的流程
符合规则的请求发起后,Charles会自动弹出「Breakpoints」窗口:
- Edit Request:修改你想改的内容(比如把
userId=1改成userId=999测试管理员权限,把Header里的token删掉测试未登录)→ 改完点「Execute」 - Edit Response:等服务返回原始响应后,修改你想改的内容(比如把状态码改成
500测试后端挂了的情况,把响应里的userName改成「测试异常值」)→ 改完点「Execute」,修改后的内容就会返回给客户端
3.3 映射设置:线上/测试环境一键切换
映射设置可以把线上的请求完全透明地转发到本地、测试环境,甚至另一个线上接口——不用改前端代码里的接口地址,不用重新打包App,非常高效。
Map Remote(远程地址映射)
最常用的映射方式,比如把线上https://api.example.com/v1/user映射到本地开发服务http://192.168.1.100:3000/dev/user:
👉 路径:Tools→Map Remote→勾选「Enable Map Remote」→点击「Add」
Map Local(本地文件映射)
适合测试固定的异常响应场景(比如接口返回空数组、返回超长字符串、返回错误状态码):
👉 路径:Tools→Map Local→勾选「Enable Map Local」→点击「Add」
配置和Map Remote几乎一样,只是「Destination」不需要填远程地址,直接选本地的JSON/HTML/TXT文件即可。
总结
Charles的配置看起来有几步,但都是「一次配置,长期使用」的内容——今天花10分钟把端口、SSL证书、过滤/映射规则搭好,以后遇到网络问题就能快速定位和解决。
如果有更高级的需求(比如WebSocket抓包、限流模拟、请求重发批量测试),可以后续再探索,但本文的内容已经足够应付日常开发测试的90%场景啦!

