如何在Fiddler中保存值并在后续重定向及请求中持久复用?
在Fiddler中实现变量持久化并用于后续请求及重定向
要在Fiddler里持久化保存值,同时让所有后续请求(包括重定向)都能调用这个值,核心是利用Fiddler的自定义脚本和内置持久化存储功能,具体步骤如下:
1. 打开Fiddler自定义脚本编辑器
点击Fiddler顶部菜单的 Rules > Customize Rules,打开CustomRules.js脚本文件(默认用FiddlerScriptEditor编辑)。
2. 提取目标值并持久化保存
在脚本的OnBeforeResponse函数中添加逻辑,从指定响应里提取你需要的值,然后保存到Fiddler的Preferences(这是Fiddler的持久化存储,重启后不会丢失)。
示例1:从响应头提取Bearer Token
static function OnBeforeResponse(oSession: Session) { // 匹配目标请求(这里以包含"login"的接口为例) if (oSession.uriContains("login") && oSession.responseCode == 200) { // 从响应头提取Token var authHeader = oSession.oResponse["Authorization"]; if (authHeader && authHeader.StartsWith("Bearer ")) { var token = authHeader.Substring(7); // 保存到Preferences,自定义键名"MyApp.AuthToken" FiddlerObject.UI.SetPreference("MyApp.AuthToken", token); } } }
示例2:从响应体JSON中提取值
如果响应体是{"token":"xxx"}这类JSON格式,可这样提取:
static function OnBeforeResponse(oSession: Session) { if (oSession.uriContains("login") && oSession.responseCode == 200) { var responseBody = oSession.GetResponseBodyAsString(); // 简单匹配JSON中的token字段 var tokenMatch = responseBody.match(/"token":"([^"]+)"/); if (tokenMatch && tokenMatch.length > 1) { var token = tokenMatch[1]; FiddlerObject.UI.SetPreference("MyApp.AuthToken", token); } } }
3. 在后续请求(含重定向)中调用保存的值
在OnBeforeRequest函数中添加逻辑,读取之前保存的值,将其注入到所有后续请求(包括自动重定向的请求)中。
示例:将Token添加到请求头
static function OnBeforeRequest(oSession: Session) { // 读取持久化的Token,第二个参数是默认值(为空字符串) var savedToken = FiddlerObject.UI.GetPreference("MyApp.AuthToken", ""); if (savedToken) { // 将Token添加到请求头 oSession.oRequest["Authorization"] = "Bearer " + savedToken; // 如果需要添加到URL参数,可取消下面注释: // var paramSeparator = oSession.url.includes("?") ? "&" : "?"; // oSession.url += `${paramSeparator}token=${savedToken}`; } }
4. 关键说明
- 持久化特性:Preferences存储在
%APPDATA%\Fiddler2\Preferences文件中,重启Fiddler后依然有效;如果用普通全局变量(比如在脚本顶部定义var g_Token;),重启Fiddler就会丢失。 - 清除值:要清除保存的值,可以调用
FiddlerObject.UI.SetPreference("MyApp.AuthToken", ""),或者直接编辑Preferences文件删除对应键值。 - 适配重定向:Fiddler的
OnBeforeRequest会拦截所有请求,包括自动重定向的请求,所以注入的逻辑会自动作用于重定向请求。
内容的提问来源于stack exchange,提问作者Duccio Fabbri
相关产品推荐
相关产品推荐

