Charles 抓包常见问题排查大全:抓不到、看不懂、连不上,一次解决
Charles 用久了,最折磨人的不是不会用,而是"配好了却抓不到"。本文把最高频的六类问题按症状 → 原因 → 解决整理成排查手册,遇到问题时对号入座即可。
- 一、完全抓不到任何请求
- 二、HTTPS 显示 unknown / 无法解密
- 三、手机连不上电脑的 Charles 代理
- 四、有些 App 就是抓不到(SSL Pinning)
- 五、localhost / 127.0.0.1 抓不到
- 六、响应乱码 / 一堆压缩字符
一、完全抓不到任何请求
症状:Charles 会话列表空空如也,浏览器却能正常上网。
逐项检查:
1. 确认 Charles 代理端口:Proxy > Proxy Settings,默认 HTTP 代理端口是 8888。
2. macOS 用户确认 Proxy > macOS Proxy 处于勾选状态(Windows 为 Windows Proxy)——它负责把系统流量自动导入 Charles。
3. 如果你用了系统级 VPN、或浏览器装了 SwitchyOmega 之类的代理插件,它们会抢占代理设置,导致流量绕开 Charles。临时关掉再试。
4. 某些浏览器(新版 Firefox)默认走 DoH/自带代理,需在浏览器里改成"使用系统代理"。
快速自检:访问 http:// 开头的普通网站(非 https),如果连它都抓不到,基本可判定是"流量根本没进 Charles",问题出在系统/浏览器代理设置,而不是证书。
二、HTTPS 显示 unknown / 无法解密
症状:能看到请求,但 HTTPS 的域名显示为 <unknown>,或 Host 后面是锁着的、看不到明文内容。
这是两件事,缺一不可:
1. 开启 SSL Proxying:Proxy > SSL Proxying Settings > Enable SSL Proxying,并 Add 一条 Host: * Port: 443(先用通配确认能通,再收窄到具体域名)。没加这一步,Charles 不会解密该域名。
2. 安装并信任 Charles 根证书:Help > SSL Proxying > Install Charles Root Certificate,安装后还必须在系统里设为"始终信任"。macOS 要去钥匙串把它改成"始终信任";Windows 要装进"受信任的根证书颁发机构"。
| 现象 | 缺的是哪一步 |
|---|---|
| 域名显示 <unknown>,内容锁着 | 没在 SSL Proxying Settings 里加这个 Host |
| 浏览器/App 直接报证书错误、连不上 | 根证书没安装或没设为"始终信任" |
三、手机连不上电脑的 Charles 代理
症状:手机 WiFi 设了代理却上不了网,或上得了网但 Charles 看不到手机流量。
排查清单:
1. 同一局域网:手机和电脑必须连同一个 WiFi(注意有些路由器的 2.4G 和 5G 是隔离的)。
2. 代理地址填对:手机 WiFi 高级设置里,HTTP 代理设为"手动",服务器填电脑的局域网 IP(在 Help > Local IP Address 里看),端口 8888。
3. 放行连接请求:手机第一次连接时,Charles 会弹窗询问是否允许,点 Allow。若没弹窗或点了 Deny,去 Proxy > Access Control Settings 把手机所在网段加进白名单。
4. 电脑防火墙:macOS/Windows 防火墙可能拦截 8888 端口的入站连接,需放行 Charles。
5. 装手机证书:用手机浏览器访问 chls.pro/ssl 下载并安装证书。iOS 装完还要去 设置 > 通用 > 关于本机 > 证书信任设置 手动打开对 Charles 证书的"完全信任"——这一步极易漏掉。
四、有些 App 就是抓不到(SSL Pinning)
症状:系统和浏览器都正常,某个 App 却连不上网或抓到的全是加密内容,报证书错误。
原因:该 App 使用了 证书绑定(SSL Pinning)——App 内置了它只信任的服务器证书指纹,Charles 的中间人证书会被直接拒绝。这是 App 主动的安全防护,不是你配置错了。
说明:对这类 App,普通配置无法解密。绕过 Pinning 通常需要在已获授权的测试设备上使用 Frida/objection 等工具 hook,或在越狱/Root 环境操作,属于安全研究范畴,且必须在合法授权下进行。对没有授权的第三方 App,请勿尝试。
另外,Android 7(API 24)起,App 默认不再信任用户安装的 CA 证书。若是你自己的 App,需在 network_security_config.xml 中显式信任 user 证书(参见 SSL 证书配置一文)。
五、localhost / 127.0.0.1 抓不到
症状:抓外网接口没问题,但访问本机开发服务 http://localhost:3000 时 Charles 一片空白。
原因:操作系统对回环地址(localhost / 127.0.0.1)的访问通常不走代理,流量直接内部转发,Charles 拦不到。
解决:
- 把地址里的
localhost换成localhost.charlesproxy.com(Charles 官方提供的、解析回 127.0.0.1 的域名,但会走代理); - 或改用本机的局域网 IP(如
http://192.168.1.10:3000)访问; - Windows 上访问
http://localhost有时需写成http://localhost.:3000(注意末尾的点)才会走代理。
六、响应乱码 / 一堆压缩字符
症状:响应体是一堆看不懂的乱码。
常见两种原因:
1. gzip/br 压缩:响应被压缩了。Charles 一般会自动解压,若没有,检查是不是没解密 HTTPS(内容还是密文),先解决第二节的解密问题。
2. 编码识别错误:在响应的查看区切换到 Text / JSON / Hex 等不同视图;确认响应的 Content-Type 与实际编码是否一致。二进制内容(图片、protobuf、gRPC)本来就无法以文本显示,需用对应视图或专门解析。
万能排查顺序总结:先确认流量有没有进 Charles(抓个 http 网站试试)→ 再确认 SSL Proxying 有没有加对 Host → 最后确认根证书装没装、信没信任。90% 的抓包问题,都卡在这三步里的某一步。按这个顺序查,基本都能定位。