如何高效使用Fiddler:设置只抓取某一域名请求的完整指南
引言:为什么需要抓取特定域名请求?
在开发调试过程中,网络请求的监控与分析是定位问题的关键手段。然而,当系统同时处理多个域名的请求时(如主站API、第三方SDK、广告服务等),Fiddler默认会捕获所有流量,导致日志冗余、分析效率低下。例如,调试微信支付接口时,若同时存在用户登录、图片加载等无关请求,开发者需手动筛选,浪费大量时间。
核心痛点:如何精准过滤无关请求,聚焦目标域名的流量?本文将通过规则配置、脚本编写、过滤验证三个维度,提供一套可复用的解决方案。
一、基础配置:通过Filters面板快速过滤
Fiddler自带的Filters面板支持基于域名的简单过滤,适合快速筛选场景。
1. 启用Filters面板
- 打开Fiddler,点击菜单栏
Rules>Customize Rules(或直接按Ctrl+R)。 - 在打开的脚本文件(
CustomRules.js)中,按Ctrl+F搜索OnBeforeRequest方法(后续高级过滤会用到此方法)。 - 返回主界面,点击右侧
Filters标签卡(若未显示,通过View>Show Filters启用)。
2. 配置域名过滤规则
- 步骤1:勾选
Use Filters启用过滤功能。 - 步骤2:在
Hosts下拉菜单中选择:Show only the following Hosts:仅显示指定域名。Hide the following Hosts:隐藏指定域名(反向过滤)。
- 步骤3:在输入框中输入目标域名(如
api.weixin.qq.com),支持通配符(如*.weixin.qq.com)。 - 步骤4:勾选
Breakpoints或Log以决定是否中断请求(调试时建议勾选Log避免中断流程)。
效果验证:发起请求后,左侧会话列表仅显示匹配域名的请求,其他域名请求被隐藏。
3. 局限性分析
Filters面板的过滤基于请求的Host头,但存在以下限制:
- 无法区分子域名(如
m.weixin.qq.com和pay.weixin.qq.com需分别配置)。 - 无法过滤特定路径(如
/api/pay和/api/login需通过脚本实现)。 - 重启Fiddler后配置可能丢失(需保存脚本)。
二、高级过滤:通过FiddlerScript实现精准控制
对于复杂场景(如同时过滤多个域名、路径或请求方法),需修改 CustomRules.js 脚本。
1. 修改OnBeforeRequest方法
在 CustomRules.js 中找到 OnBeforeRequest 方法(约第500行),添加以下代码:
static function OnBeforeRequest(oSession: Session) {// 定义目标域名列表var targetDomains = ["api.weixin.qq.com", "pay.weixin.qq.com"];var isTarget = false;// 检查请求的Host是否在目标列表中for (var i = 0; i < targetDomains.length; i++) {if (oSession.host.toLowerCase() == targetDomains[i].toLowerCase()) {isTarget = true;break;}}// 若非目标域名,隐藏请求(可选:标记为灰色)if (!isTarget) {oSession["ui-hide"] = true; // 隐藏请求// oSession["ui-color"] = "gray"; // 标记为灰色(不隐藏)}}
2. 扩展功能:结合路径过滤
若需进一步过滤路径(如仅捕获 /api/pay),修改代码如下:
static function OnBeforeRequest(oSession: Session) {var targetDomains = ["api.weixin.qq.com"];var targetPaths = ["/api/pay", "/v1/order"];var isTarget = false;// 检查域名if (targetDomains.some(d => oSession.host.toLowerCase() == d.toLowerCase())) {// 检查路径for (var i = 0; i < targetPaths.length; i++) {if (oSession.PathAndQuery.toLowerCase().startsWith(targetPaths[i].toLowerCase())) {isTarget = true;break;}}}oSession["ui-hide"] = !isTarget;}
3. 保存与生效
- 按
Ctrl+S保存脚本,Fiddler会自动重新加载规则。 - 发起请求后,仅显示匹配域名和路径的请求。
三、验证与调试:确保过滤规则生效
1. 测试用例设计
- 正向测试:访问目标域名(如
https://api.weixin.qq.com/api/pay),确认请求显示。 - 反向测试:访问非目标域名(如
https://www.baidu.com),确认请求隐藏。 - 边界测试:访问子域名(如
m.api.weixin.qq.com),确认规则是否覆盖。
2. 日志与断点调试
- 在脚本中添加日志输出:
static function OnBeforeRequest(oSession: Session) {FiddlerObject.log("Request to: " + oSession.host + oSession.PathAndQuery);// ...原有逻辑...}
- 通过
Fiddler底部的Log标签卡查看调试信息。
四、进阶技巧:结合AutoResponder实现自动化
若需对特定域名的请求进行模拟响应,可结合AutoResponder功能:
- 在Filters中过滤目标域名(如
api.weixin.qq.com)。 - 打开
AutoResponder标签卡,勾选Enable rules和Unmatched requests passthrough。 - 点击
Add Rule,输入匹配规则(如EXACT)。
//api.weixin.qq.com/api/pay - 在右侧选择响应文件(如本地JSON)或直接输入响应内容。
应用场景:测试支付接口时,模拟服务器返回成功响应,无需真实调用。
五、常见问题与解决方案
1. 过滤规则不生效
- 原因:脚本未保存或语法错误。
- 解决:检查
Fiddler底部的Script标签卡是否有报错,按Ctrl+S保存脚本。
2. HTTPS请求无法捕获
- 原因:未安装Fiddler根证书。
- 解决:
- 访问
http://localhost:8888下载证书。 - 双击证书安装到“受信任的根证书颁发机构”。
- 在
Tools>Options>HTTPS中勾选Decrypt HTTPS traffic。
- 访问
3. 性能下降
- 原因:过滤规则过于复杂或日志过多。
- 解决:
- 缩小目标域名范围。
- 在
Filters中勾选Limit the number of displayed requests。
六、总结:选择适合的过滤方式
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Filters面板 | 快速过滤单个域名 | 配置简单,无需编程 | 功能有限,无法组合条件 |
| FiddlerScript | 复杂过滤(多域名、路径、方法) | 灵活度高,可扩展 | 需要脚本基础,调试复杂 |
| AutoResponder | 模拟特定域名响应 | 自动化测试,节省时间 | 依赖过滤规则先生效 |
推荐实践:
- 简单场景使用Filters面板。
- 复杂场景编写FiddlerScript,结合日志调试。
- 测试阶段使用AutoResponder模拟响应。
通过以上方法,开发者可高效聚焦目标域名的请求,大幅提升调试效率。