一、为什么需要设置只抓取特定域名请求?
在Web开发调试过程中,开发者常面临以下痛点:
- 流量过载问题:当监控整个网络接口时,Fiddler会捕获浏览器、后台服务、系统更新等所有HTTP/HTTPS请求,导致会话列表被无关请求淹没。
- 隐私保护需求:在多人协作或公共环境调试时,过滤非目标域名请求可避免敏感数据泄露。
- 性能优化需求:针对特定域名的请求分析(如API调用耗时、资源加载顺序)需要精准的流量隔离。
- 移动端调试场景:通过代理抓取移动设备流量时,过滤无关域名可显著提升调试效率。
以电商网站开发为例,开发者可能只需关注api.example.com的接口请求,而忽略静态资源(如CDN域名)和第三方服务(如支付网关)的请求。
二、基础配置方法:使用Filters面板
1. 访问Filters配置界面
在Fiddler主界面点击菜单栏的Rules > Customize Rules,或直接通过快捷键Ctrl+R打开Fiddler Script编辑器。更快捷的方式是直接点击工具栏的Filters按钮(图标为漏斗形状)。
2. 核心过滤参数设置
在打开的Filters选项卡中,配置以下关键项:
- Hosts下拉菜单选择
Show only the following Hosts -
在输入框中输入目标域名,支持多种格式:
# 精确匹配api.example.com# 通配符匹配(需启用正则表达式)^.*\.example\.com$# 多域名配置(用分号分隔)api.example.com;cdn.example.com
- 勾选
Use RegEx选项可启用正则表达式匹配(适用于复杂域名规则)
3. 高级过滤选项
- 进程过滤:通过
Process下拉菜单限制特定进程的请求(如chrome.exe) - 响应类型过滤:在
Response Type and Size区域可设置只显示特定Content-Type的响应 - 断点设置:结合
Breakpoints功能可对特定域名请求设置中断条件
4. 配置保存与共享
点击Actions > Save Filter Settings可将当前配置保存为.far文件,便于团队共享或后续复用。
三、进阶方案:使用FiddlerScript自定义过滤
1. 脚本编辑基础
通过Rules > Customize Rules打开Fiddler Script编辑器(默认文件为CustomRules.js),找到OnBeforeRequest方法,这是所有请求进入Fiddler时的入口点。
2. 基础域名过滤脚本
static function OnBeforeRequest(oSession: Session) {// 定义需要过滤的域名白名单var whiteList = ["api.example.com", "cdn.example.com"];var host = oSession.uriHost;// 检查当前请求的host是否在白名单中var isAllowed = false;for (var i = 0; i < whiteList.length; i++) {if (host.toLowerCase() == whiteList[i].toLowerCase()) {isAllowed = true;break;}}// 如果不在白名单则隐藏请求if (!isAllowed) {oSession["ui-hide"] = "true";}}
3. 正则表达式增强版
static function OnBeforeRequest(oSession: Session) {// 使用正则表达式匹配多个子域名var pattern = /^(api|cdn)\.example\.com$/i;if (!pattern.test(oSession.uriHost)) {oSession["ui-hide"] = "true";}}
4. 动态白名单实现
// 定义可动态更新的白名单数组var domainWhitelist = [];// 添加白名单域名的函数function AddToWhitelist(domain) {if (domainWhitelist.indexOf(domain.toLowerCase()) == -1) {domainWhitelist.push(domain.toLowerCase());}}// 初始化白名单(可通过外部接口动态调用)AddToWhitelist("api.example.com");AddToWhitelist("auth.example.com");static function OnBeforeRequest(oSession: Session) {var isAllowed = domainWhitelist.some(function(domain) {return oSession.uriHost.toLowerCase().indexOf(domain) > -1;});if (!isAllowed) {oSession["ui-hide"] = "true";}}
四、特殊场景解决方案
1. HTTPS请求过滤
对于加密流量,需先完成以下配置:
- 在
Tools>Options>HTTPS中勾选Decrypt HTTPS traffic - 安装Fiddler根证书到设备信任存储
- 在过滤脚本中添加HTTPS协议检查:
if (oSession.isHTTPS && !oSession.uriHost.contains("api.example.com")) {oSession["ui-hide"] = "true";}
2. 移动端代理过滤
- 配置移动设备代理指向Fiddler所在IP和端口(默认8888)
- 在Fiddler中设置
Allow remote computers to connect - 使用以下脚本过滤移动端特定域名:
// 过滤来自移动设备的非目标域名请求if (oSession["X-ClientIP"] &&!oSession.uriHost.contains("api.example.com")) {oSession["ui-hide"] = "true";}
3. 命令行自动化过滤
通过Fiddler的/filter参数启动时自动应用过滤规则:
fiddler.exe /filter:"Host contains 'api.example.com'"
或使用脚本文件:
fiddler.exe /script:CustomFilter.js
五、验证与调试技巧
-
过滤效果验证:
- 在Filters面板勾选
Highlight选项,符合条件的请求会高亮显示 - 使用
Ctrl+F在会话列表中搜索目标域名
- 在Filters面板勾选
-
性能监控:
- 通过
Statistics选项卡查看过滤后请求的总体统计 - 使用
Timeline视图分析请求时间分布
- 通过
-
常见问题排查:
- 过滤不生效:检查域名拼写、协议类型(HTTP/HTTPS)
- 误过滤情况:在脚本中添加
FiddlerObject.log(oSession.uriHost)输出调试信息 - 证书问题:确保移动设备安装了Fiddler根证书
六、最佳实践建议
- 版本控制:将过滤脚本纳入项目版本管理,与代码同步更新
- 环境区分:为开发、测试、生产环境准备不同的过滤配置
- 文档记录:维护过滤规则说明文档,记录每个域名的过滤原因
- 性能考量:避免在脚本中执行复杂计算,防止影响Fiddler处理速度
- 安全审计:定期审查白名单域名,移除不再需要的过滤规则
通过以上配置方法,开发者可以精准控制Fiddler的抓包范围,大幅提升调试效率。实际项目中,建议结合Filters面板的快速配置和FiddlerScript的灵活扩展,根据不同调试场景选择最适合的过滤方案。