如何使用Charles Proxy监听Firestore网络流量?
解码Firestore的Charles Proxy网络流量
我之前也碰到过一模一样的问题!Firestore确实基于Protocol Buffers传输数据,Charles默认没法直接解码这些加密/序列化后的流量,但借助官方开源的Protobuf定义文件,完全能搞定这个事儿,步骤如下:
获取Firestore的Protobuf定义文件
你提到的Firestore SDK仓库里的protos目录下包含了所有需要的.proto文件,把这个目录下的所有文件(包括子目录里的)都下载到本地,注意保留原有的目录结构——因为很多proto文件之间有互相引用的依赖,乱改结构会导致Charles找不到依赖项。配置Charles的Protobuf解码规则
- 打开Charles,点击顶部菜单栏的
Tools > Protobuf Settings - 点击弹窗里的
Add按钮,新建一条解码规则 - 在
Match标签页,设置URL匹配规则,比如填写firestore.googleapis.com/v1/projects/*/databases/*/documents/**,确保能覆盖所有Firestore的文档操作请求 - 切换到
Proto Files标签页,点击Add Files,把刚才下载的所有.proto文件都导入进去
- 打开Charles,点击顶部菜单栏的
解决Protobuf依赖问题
如果导入后Charles提示找不到某个依赖的proto文件(比如common.proto),可以:- 把所有
.proto文件放到同一个文件夹下,减少路径引用的问题 - 或者在
Protobuf Settings的Search Paths标签页,添加存放proto文件的文件夹路径,让Charles能自动搜索到依赖的文件
- 把所有
验证解码效果
重新配置你的安卓/iOS设备代理,触发Firestore的操作(比如读写文档),这时候在Charles里查看对应的请求和响应,就能看到解码后的结构化内容了——一般会以JSON格式展示,能清晰看到传输的字段和值。
额外注意事项
- 确保你已经在设备上安装了Charles的根证书,并且开启了HTTPS代理,不然连加密的流量都抓不到,更别说解码了
- 如果是gRPC类型的Firestore请求,要确保URL匹配规则覆盖了gRPC的路径(比如
/google.firestore.v1.Firestore/*) - 尽量下载和你当前使用的Firestore SDK版本对应的proto文件,版本不匹配可能会出现字段不兼容的解码错误
内容的提问来源于stack exchange,提问作者c_idle
相关产品推荐
相关产品推荐

