Agent-Reach:智能体触达真实世界的工具调用与安全架构指南
2026/10/26 7:09:37
移动端开发里,WebSocket 就像一条看不见的电话线:App 和服务器聊得热火朝天,你却只能盯着日志干瞪眼。�抓包工具要么看不懂加密帧,要么干脆把二进制当乱码扔给你。更糟的是,iOS 17 和 Android 13 以后,系统对「用户证书」直接降级,HTTPS 流量说断就断。于是调试流程变成:改代码→打日志→重新打包→祈祷复现,一杯咖啡喝完,问题还在原地。
安装后第一次打开,Charles 默认监听*:8888。为了后面少踩坑,建议把端口改成好记的8889,并强制开启透明代理:
*,Port 填*,让 Charles 对所有域名都尝试解密——本地调试别害羞,后面再收紧规则<!-- 片段:charles-proxy.xml 手动导入用 --> <sslProxying> <location> <host>*</host> <port>*</port> </location> </sslProxying>chls.pro/ssl,自动下载charles-proxy-ssl.crtnetwork_security_config.xml里加一段即可:<network-security-config> <debug-overrides> <trust-anchors> <certificates src="user"/> </trust-anchors> </debug-overrides> </network-security-config>打包 debug 包时把android:debuggable=true打开,Charles 就能解密 HTTPS WebSocket。
chls.pro/ssl,系统会提示下载描述文件Charles 左侧结构树里,wss 连接会显示成「 WebSocket」。右键 → Focus 可把它钉到顶部。接下来:
ws或域名关键字,实时流量瞬间清爽| 现象 | 可能原因 | 解决 |
|---|---|---|
| 手机无法上网 | 电脑防火墙没放行 8889 | 临时给 Charles 入站规则开 TCP 8889,调试完记得关 |
| SSL Unknown | 证书没信任 | Android 看network_security_config,iOS 看「证书信任设置」 |
| 426 Upgrade Required | 后端强制 TLS1.3,而 Charles 4.6 以下默认关闭 | Proxy → SSL Proxying → Locations → 勾选 Enable TLS 1.3 |
| 乱码 | 二进制掩码未解 | 确认帧类型为 Text/Binary,Charles 会自动解掩码;若服务端加密内容,需让后端给调试密钥 |
Charles 的 Proxy → Throttle 可以限制带宽、延迟、丢包率。把上行/下行调到 20 kbps,丢包 10%,再让 App 发心跳,观察:
onClose?把实验结果和日志对照,就能验证重连算法是否真能在地铁里保命。
写完这篇,我最大的感受是:工具其实不挑食,关键得跑通「证书 → 代理 → 过滤」这条链路。为了把整条链路拆给自己看,我顺手在 从0打造个人豆包实时通话AI 实验里把 Charles 抓到的 WebSocket 帧直接喂给豆包语音模型,让它实时读出来,居然连「心跳 ping」都被念成了「砰」一声,场面一度非常魔性。如果你也想把抓包和 AI 玩在一起,不妨去实验里试试,小白也能三分钟跑起麦克风对话,顺便验证自己的重连逻辑,比干看日志有趣多了。