打开Fiddler,抓包默认它就已经在监听8888端口了。并分浏览器或者手机端只要把代理指向这台机器的析测8888端口,流量就会自动流进来。抓包我见过不少人卡在这一步——手机装了证书但抓不到HTTPS,并分多半是析测证书没装到系统信任区,或者Android 7以上没改网络安全性配置。抓包Fiddler的并分证书生成逻辑是第一次运行时在本地生成一个根证书,需要手动导出并安装到设备上。析测
抓包列表里每一行都是抓包一次请求。左边是并分状态码,中间是析测Host和URL,右边是抓包body大小和耗时。点开某一行,并分右侧面板分上下两块:上半部分是析测请求,下半部分是响应。请求区能看到Raw、Headers、WebForms、Inspectors。我习惯先看Inspectors里的Headers,确认Content-Type和Cookie有没有带对。有一次调一个上传接口,服务端一直返回400,最后在WebForms里发现文件字段名拼错了,前端传的是“file”,后端读的是“upload”。这种问题看代码很难发现,抓包一眼就出来了。
响应区的TextView和JSON标签页最常用。TextView适合看HTML或纯文本,JSON会自动格式化。如果返回的是压缩过的内容,Fiddler默认会解压,但有时候服务端返回了gzip却没正确设置Content-Encoding,TextView里就是乱码。这时候切到Raw标签,看原始字节,或者用HexView。我碰到过一次接口返回的JSON里带BOM头,前端解析报错,Fiddler的JSON视图直接显示了“\ufeff”,定位起来非常快。
过滤流量是必须的。默认Fiddler会抓所有进程的请求,浏览器插件、系统更新、甚至某些后台服务都会混进来。在Filters标签里勾选“Use Filters”,然后在Hosts里填目标域名,比如“api.example.com”,列表瞬间干净。更狠一点的做法是写FiddlerScript,在OnBeforeRequest里判断URL,不匹配的直接置oSession.oRequest.FailSession。我一般用Filters就够了,除非要抓特定Header的请求。
分析性能问题时,Timeline视图比看单个请求有用。它把每个请求的阻塞、DNS、连接、SSL、发送、等待、接收各阶段画成色条。有一次用户反馈页面加载慢,抓包后发现某个CSS文件的TTFB(等待时间)高达2秒,其他资源都正常。问题出在后端那个接口上,跟前端没关系。这种结论靠看代码或者日志很难得出,Timeline把时间消耗可视化之后,责任方一目了然。
Composer标签可以手动构造请求。改个参数、换个Token、重放一次,比在代码里加日志再重启服务快得多。测试接口幂等性的时候,我把同一个POST请求连续发了五次,观察数据库里是否只插入一条记录。AutoResponder则用来模拟服务端返回。前端等后端接口等不及了,直接拿一个本地JSON文件配成AutoResponder规则,匹配上就返回假数据,联调效率高很多。
抓HTTPS流量需要额外一步。Tools > Options > HTTPS里勾选Decrypt HTTPS traffic,Fiddler会重新生成证书。如果遇到某些App用了证书绑定(Certificate Pinning),Fiddler就抓不到了,请求会直接失败。这时候要么用Xposed模块绕过绑定,要么换用支持Frida的抓包工具。我个人的经验是,大部分内部测试环境不会开Pinning,Fiddler足够应付日常调试。
最后说一个细节:Fiddler的会话可以保存成.saz文件。测试过程中把关键请求存下来,发给开发或者留作回归对比,比截图靠谱得多。打开.saz文件时,所有请求的原始数据、时间戳、甚至当时的响应内容都在,复现问题方便很多。