如何高效使用Fiddler:设置只抓取某一域名请求的完整指南

如何高效使用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:勾选 BreakpointsLog 以决定是否中断请求(调试时建议勾选 Log 避免中断流程)。

效果验证:发起请求后,左侧会话列表仅显示匹配域名的请求,其他域名请求被隐藏。

3. 局限性分析

Filters面板的过滤基于请求的Host头,但存在以下限制:

  • 无法区分子域名(如 m.weixin.qq.compay.weixin.qq.com 需分别配置)。
  • 无法过滤特定路径(如 /api/pay/api/login 需通过脚本实现)。
  • 重启Fiddler后配置可能丢失(需保存脚本)。

二、高级过滤:通过FiddlerScript实现精准控制

对于复杂场景(如同时过滤多个域名、路径或请求方法),需修改 CustomRules.js 脚本。

1. 修改OnBeforeRequest方法

CustomRules.js 中找到 OnBeforeRequest 方法(约第500行),添加以下代码:

  1. static function OnBeforeRequest(oSession: Session) {
  2. // 定义目标域名列表
  3. var targetDomains = ["api.weixin.qq.com", "pay.weixin.qq.com"];
  4. var isTarget = false;
  5. // 检查请求的Host是否在目标列表中
  6. for (var i = 0; i < targetDomains.length; i++) {
  7. if (oSession.host.toLowerCase() == targetDomains[i].toLowerCase()) {
  8. isTarget = true;
  9. break;
  10. }
  11. }
  12. // 若非目标域名,隐藏请求(可选:标记为灰色)
  13. if (!isTarget) {
  14. oSession["ui-hide"] = true; // 隐藏请求
  15. // oSession["ui-color"] = "gray"; // 标记为灰色(不隐藏)
  16. }
  17. }

2. 扩展功能:结合路径过滤

若需进一步过滤路径(如仅捕获 /api/pay),修改代码如下:

  1. static function OnBeforeRequest(oSession: Session) {
  2. var targetDomains = ["api.weixin.qq.com"];
  3. var targetPaths = ["/api/pay", "/v1/order"];
  4. var isTarget = false;
  5. // 检查域名
  6. if (targetDomains.some(d => oSession.host.toLowerCase() == d.toLowerCase())) {
  7. // 检查路径
  8. for (var i = 0; i < targetPaths.length; i++) {
  9. if (oSession.PathAndQuery.toLowerCase().startsWith(targetPaths[i].toLowerCase())) {
  10. isTarget = true;
  11. break;
  12. }
  13. }
  14. }
  15. oSession["ui-hide"] = !isTarget;
  16. }

3. 保存与生效

  • Ctrl+S 保存脚本,Fiddler会自动重新加载规则。
  • 发起请求后,仅显示匹配域名和路径的请求。

三、验证与调试:确保过滤规则生效

1. 测试用例设计

  • 正向测试:访问目标域名(如 https://api.weixin.qq.com/api/pay),确认请求显示。
  • 反向测试:访问非目标域名(如 https://www.baidu.com),确认请求隐藏。
  • 边界测试:访问子域名(如 m.api.weixin.qq.com),确认规则是否覆盖。

2. 日志与断点调试

  • 在脚本中添加日志输出:
    1. static function OnBeforeRequest(oSession: Session) {
    2. FiddlerObject.log("Request to: " + oSession.host + oSession.PathAndQuery);
    3. // ...原有逻辑...
    4. }
  • 通过 Fiddler 底部的 Log 标签卡查看调试信息。

四、进阶技巧:结合AutoResponder实现自动化

若需对特定域名的请求进行模拟响应,可结合AutoResponder功能:

  1. 在Filters中过滤目标域名(如 api.weixin.qq.com)。
  2. 打开 AutoResponder 标签卡,勾选 Enable rulesUnmatched requests passthrough
  3. 点击 Add Rule,输入匹配规则(如 EXACT:https://api.weixin.qq.com/api/pay)。
  4. 在右侧选择响应文件(如本地JSON)或直接输入响应内容。

应用场景:测试支付接口时,模拟服务器返回成功响应,无需真实调用。

五、常见问题与解决方案

1. 过滤规则不生效

  • 原因:脚本未保存或语法错误。
  • 解决:检查 Fiddler 底部的 Script 标签卡是否有报错,按 Ctrl+S 保存脚本。

2. HTTPS请求无法捕获

  • 原因:未安装Fiddler根证书。
  • 解决
    1. 访问 http://localhost:8888 下载证书。
    2. 双击证书安装到“受信任的根证书颁发机构”。
    3. Tools > Options > HTTPS 中勾选 Decrypt HTTPS traffic

3. 性能下降

  • 原因:过滤规则过于复杂或日志过多。
  • 解决
    • 缩小目标域名范围。
    • Filters 中勾选 Limit the number of displayed requests

六、总结:选择适合的过滤方式

方式 适用场景 优点 缺点
Filters面板 快速过滤单个域名 配置简单,无需编程 功能有限,无法组合条件
FiddlerScript 复杂过滤(多域名、路径、方法) 灵活度高,可扩展 需要脚本基础,调试复杂
AutoResponder 模拟特定域名响应 自动化测试,节省时间 依赖过滤规则先生效

推荐实践

  1. 简单场景使用Filters面板。
  2. 复杂场景编写FiddlerScript,结合日志调试。
  3. 测试阶段使用AutoResponder模拟响应。

通过以上方法,开发者可高效聚焦目标域名的请求,大幅提升调试效率。