反骨仔

一个业余的 .NET Core 攻城狮

0%

10 Fiddler 的 Script 用法

Fiddler Script 是一个可以自动修改 HTTP 请求和 HTTP 响应的脚本文件,不用手动地去下“断点”来修改。
Fiddler Script 属于 Fiddler 的高级内容,它可以让 Fiddler 的扩展性更好 ,功能更加强大。

10.1 Fiddler Script 介绍

在大多数情况下 , 通过 Fiddler 默认菜单的功能就可以基本满足开发者的调试需求。这里是针对复杂的场景。

Fiddler Seript 的本质其实是用 JScript.NET 语言写的一个脚本文件 CustomRules.js,其语法类似于 C#。

通过修改 CustomRules.js 可以很容易修改 HTTP 请求和 HTTP 响应,不用中断程序;利用它还可以针对不同的 URL 做特殊的处理 。

CustomRules.js 位于 :C:\Documents and Settings\[your user]\My Documents\Fiddler2\Scripts\CustomRules.js 下。

1
2
// 比如我的本地文件位置
C:\Documents and Settings\wen\My Documents\Fiddler2\Scripts

也可以在 Fiddler 中打开 CustomRules .js 文件, 启动 Fiddler,单击菜单 Rules -> CustomizeRules …

Fiddler Script 的官方帮助文档的地址是:http://www.fiddlerbook.com/FiddlerIdev/ScriptSamples.asp

10.2 Fiddler Script Editor

目前最新版的 Fiddler 己经集成 了 Fiddler Script Editor 插件,不需要额外安装。

推荐使用 FiddlerScript Editor 来编辑。

Fiddler Script Editor 提供了语法高亮显示编译错误提示和智能提示的功能, 编辑起来很方便。

image-20210116200318807

image-20210110135901525

启动 Fiddler,单击菜单 Rules -> Customize Rules …,如图 10-3 所示,可以打开 CustomRules.js 文件。

这三种方法都可 以用来编辑 CustomRules.js。

image-20210110140027259

image-20210110140042075

10.3 CustomRules.js 中的主要方法

1
static function OnBeforeRequest(oSession: Session)

OnBeforeRequest 函数在每次请求之前调用。在这个方法中修改 Request 的内容,我们用得最多

1
static function OnBeforeResponse(oSession: Session)

OnBeforeResponse 函数在每次响应之前调用,在这个方法中修改 Response 的内容。

1
static function OnExecAction(sParams: String[])

这个方法中包含 Fiddler 命令。命令是在 Fiddler 界面中左下方的 QuickExec 中执行的。

10.4 Fiddler 定制菜单

Fiddler 可以模拟各种浏览器,可以通过单击菜单 Rules -> User-Agents 下的子菜单来实现。

image-20210116200754614

image-20210110140318489

User-Agents 菜单中好像没有 Iphone 4S safari,我们现在定制一个。先在网上查询 iPhone 4S safari 的 user-Agents ,然后添加如下代码就可以了:

1
RulesStringValue(23, "Iphone 48 safari", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7")

保存脚本,重启 Fiddler 就可以看到菜单中多了个 Iphone 4s safari 。

image-20210116201542212

可以把常用的操作都定义成一个菜单,这样用起来很方便。

10.5 修改 Session 在 Fiddler 的显示样式

有时候,找到自己想要的 HTTP 请求是需要靠眼力的,我们可以用 Script 设置一下颜色。

我们可以控制 Session 在 Fiddler 中显示的样式 。

把以下脚本放在 OnBeforeRequest(oSession: Session) 方法下,并且单击“ Save script” ,这样所有的 cnblogs 会话都会显示为红色 。

1
2
3
if (oSession.HostnameIs("www.cnblogs.com")) {
oSession["ui-color"] = "red";
}

image-20210116202211567

保存后重新进行请求:

image-20210116202034372

【注意】如果不生效,尝试重启 Fiddler

10.6 修改 HTTP 请求

如果要修改 HTTP 请求,代码应该放在 OnBeforeRequest(oSession: Session)方法下面。

我们可以修改 HTTP 请求中的任何数据 ,如 HOST 、Header、Cookie 等 。

Cookie 其实就是 HTTP 请求 中的一个 Header 。

image-20210110141109833

10.6.2 替换 HTTP 请求的 Host 地址

我们最初发送给 A 站点的 HTTP 请求,都被 Fiddler 转发到 B 站点,而在浏览器中毫无感觉。测试或者 debug 过程中经常会有这种需求。

例如用 www.tank-demo.com 替换 www.tank-dev.com

image-20210110141240408

10.6.3 修改 HTTP 请求中的 Header

image-20210110141302787

10.6.4 修改 HTTP 请求中的 Body

方法一 :先把 Body 的字符串读取出来,修改后再塞回去。

image-20210110141347460

方法二 :也可以采用非常简单的方法,即直接替换 body 中的数据 。

image-20210110141423802

10.7 修改 HTTP 晌应

在 Script 中修改 HTTP 响应的方法 ,代码应该放在 OnBeforeResponse(oSession: Session)方法下面 。

修改 HTTP 响应的方法和修改 HTTP 请求的方法差不多。

【实例】使用如下代码,修改博客园网页中的数据。

image-20210110141521627

打开浏览器,输入 www.cnblogs.com/liqngwen/

image-20210110141555817

10.8 读写 txt 文件

1
2
// 导入命名空间
import System.IO;

image-20210110141647663

10.9 使用正则表达式

1
2
// 导入命名空间
import System.Text.RegularExpressions;

image-20210110141729767

10.10 保存 Session

image-20210110141748114

10.11 读取 Session ,并且使用 Fiddler 来发送

image-20210110141810651

参考

《HTTP抓包实战》

修订