Fiddler Script 代码片段
一、核心事件函数:脚本的入口
Fiddler Script 的逻辑主要围绕两个核心事件函数展开,所有自定义操作都需要写在这两个函数内部。
// 请求发送到服务器之前触发,可用于修改请求参数、拦截请求等
static function OnBeforeRequest(oSession: Session) {}
// 服务器返回响应之后触发,可用于修改响应内容、解析返回数据等
static function OnAfterResponse(oSession: Session) {}
二、请求处理:玩转客户端请求
在 OnBeforeRequest 函数中,我们可以对客户端发出的请求进行各种自定义处理,满足不同的调试需求。
- 修改请求头信息
请求头承载着客户端的关键信息,通过 Fiddler Script 可以轻松修改、添加或删除请求头参数。
// 修改 User-Agent,模拟手机端请求
oSession.oRequest["User-Agent"] = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15";
// 新增自定义请求头
oSession.oRequest.headers.Add("X-Custom-Test", "Fiddler-Script-Test");
// 移除 Referer 请求头,隐藏请求来源
oSession.oRequest.headers.Remove("Referer");
2. URL 与域名映射转发
在调试环境时,经常需要将对线上域名的请求转发到本地或测试服务器,这个需求可以通过域名匹配轻松实现。
// 将对 a.com 的所有请求转发到 b.com
if (oSession.HostnameIs("a.com")) {
oSession.host = "b.com";
}
// 拦截特定 URI 路径的请求,例如用户相关接口
if (oSession.uriContains("/api/user/info")) {
// 此处可添加自定义处理逻辑,如中断请求、修改参数等
}
3. 模拟网络限速
调试弱网环境下的应用表现是测试的重要环节,Fiddler Script 可以精准控制请求和响应的延迟时间。
// 定义是否开启限速模式
var m_SimulateModem = true;
if (m_SimulateModem) {
// 请求数据延迟 300ms 发送
oSession["request-trickle-delay"] = "300";
// 响应数据延迟 1000ms 返回
oSession["response-trickle-delay"] = "1000";
}
三、响应处理:定制服务器返回内容
在 OnAfterResponse 函数中,我们可以对服务器返回的响应数据进行解码、修改、替换等操作,轻松实现数据篡改调试。
- 解码并修改文本类响应
对于 HTML、JSON、XML 等文本格式的响应,需要先解码再进行内容替换,避免因压缩导致修改失效。
// 匹配 HTML 类型的响应
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "text/html")) {
oSession.utilDecodeResponse(); // 解码 gzip 或 deflate 压缩的响应
oSession.utilReplaceInResponse("原网页文本内容", "替换后的自定义内容"); // 替换响应文本
}
// 修改 JSON 响应中的字段值
if (oSession.uriContains("/api/getUserResult")) {
oSession.utilDecodeResponse();
var responseBody = oSession.GetResponseBodyAsString();
// 将响应中 Result 字段的值从 1 改为 0
responseBody = responseBody.Replace(""Result":1", ""Result":0");
oSession.utilSetResponseBody(responseBody); // 重新设置修改后的响应体
}
2. 修改响应状态码
有时我们需要模拟服务器返回异常状态的场景,比如 404、500 等,通过脚本可以直接修改响应状态码。
// 对特定请求返回 404 状态码
if (oSession.uriContains("/api/error/test")) {
oSession.responseCode = 404;
oSession.oResponse.headers.Add("X-Error-Msg", "Not Found Custom");
}
四、会话过滤:聚焦关键请求
当页面请求较多时,我们可以通过脚本过滤掉无关的会话,只关注需要调试的请求,让抓包结果更清晰。
// 隐藏所有图片类请求的会话
if (oSession.oRequest.headers.ExistsAndContains("Content-Type", "image/")) {
oSession["ui-hide"] = "true";
}
五、使用小贴士
-
编写的脚本需要保存到 Fiddler 的 Scripts > CustomRules.js 文件中,修改后需重启 Fiddler 生效。
-
在修改响应体时,一定要先调用 utilDecodeResponse() 方法解码,否则无法正确修改压缩后的内容。
-
脚本中的逻辑可以结合条件判断灵活组合,满足复杂的调试场景需求。

浙公网安备 33010602011771号