您的位置:

Fiddler过滤深度探究

一、Filter介绍

Fiddler是一款免费的web调试代理工具,不仅可以查看和修改HTTP请求和响应数据,并且还有非常强大的过滤功能,这让我们在调试过程中能够过滤掉不必要的内容,大大提高调试效率。Filter是Fiddler中非常重要的一个功能,通过Filter可以实现只展示特定内容、过滤掉无关内容、快速定位调试信息等功能。

二、Filter的基础使用

Fiddler的主界面中最上方是Filter选项卡,我们在这里可以输入过滤的关键词,下方会自动显示符合条件的会话列表。最简单的使用方法就是输入关键词,然后点击“Show Only Matching Sessions”按钮,就可以看到符合条件的会话列表,如下所示:

//简单filter示例
//过滤掉所有URL地址中包含“baidu”关键字的会话
if (oSession.uriContains("baidu")) {
    oSession["ui-hide"] = "true";
}

除了uriContains,Fiddler还支持其他多种过滤方式,例如:uriMatches、uriEquals、oSession.RequestHeaders.AllKeys.Contains()等。同时,我们还可以利用not关键字实现反向匹配,例如:“not(uriContains("facebook"))”,这样的Filter就是过滤掉所有包含“facebook”的会话。

三、Filter高级功能

1、正则表达式的使用

除了简单的文本过滤之外,Fiddler还支持使用正则表达式进行过滤。在Filter选项卡中,勾选“Use regular expressions”选项,就可以在过滤关键字输入框中使用正则表达式了。

//正则表达式filter示例
//过滤掉URL中以.baidu.com为结尾的会话
if (oSession.uriMatches(".*/[.]?baidu[.][^/]*$")) {
    oSession["ui-hide"] = "true";
}

2、自定义列的添加和过滤

Fiddler中可以方便地添加自定义列,在自定义列中可以显示我们需要的信息,例如请求头、响应头信息、页面加载时间、HTTP状态码等。自定义列中的内容也支持过滤操作,在Filter选项卡中,点击“Filter by Column”按钮就可以进行自定义列的过滤。

//自定义列和自定义列过滤filter示例
//自定义列名“MyHeader”,显示oSession.RequestHeaders["MyHeader"]的值
FiddlerObject.UI.lvSessions.AddBoundColumn("MyHeader","MyHeader value","RequestHeaders", "MyHeader");
//过滤掉MyHeader值为"SensitiveValue"的会话
if (oSession.RequestHeaders["MyHeader"]=="SensitiveValue") {
    oSession["ui-hide"] = "true";
}

3、JavaScript脚本的使用

Fiddler支持在Filter中使用JavaScript脚本,这让我们在过滤方面有了更强大的控制。通过JavaScript脚本我们可以实现更为复杂的逻辑过滤,以及定位特定的会话信息。

//JavaScript脚本filter示例
//过滤掉所有含有图片和脚本的会话
if(oSession.oResponse.headers.ExistsAndContains("Content-Type", "image/") || 
   oSession.oResponse.headers.ExistsAndContains("Content-Type", "script/")){
    oSession["ui-hide"] = "true";
}

四、Filter的效率和性能

Filter的效率和性能对于Fiddler的使用和性能至关重要。当我们的过滤条件变得复杂或者数据量变得庞大时,Filter的效率和性能就会受到一定的影响。在实际使用中,推荐在Filter条件中使用最简单的文本过滤,避免使用反复匹配的过滤条件以及复杂的JavaScript操作。

五、总结

Fiddler的Filter功能非常强大,可以让我们快速定位并修复错误。无论是基础还是高级的Filter操作,都可以通过Fiddler的帮助文档和详细的API进行实现。在实际开发中,我们可以灵活地使用Filter功能,达到根据需求进行快速和准确的定位与调试的目的。