[fiddler script]session会话相关功能和用法

[fiddler script]session会话相关功能和用法

Session事件

一般由 定位+ 更新组成:

if (oSession.uriContains("abc")) { // 定位
  /* 更新 */
}

定位方法

1.URI
统一资源标识符(Uniform Resource Identifier)是一个用于标识某一互联网资源名称的字符串
具体:https://www.10qianwan.com/articledetail/852470.html

oSession.uriContains("caseInsensitiveStringFromURI")

URI与URL的关系:
URI与URL的关系
2. hostname
主机名,uri中有包含

oSession.HostnameIs("baidu.com")

3.HTTPMethodIs
请求方法:https://www.runoob.com/tags/html-httpmethods.html

oSession.HTTPMethodIs("POST"&& oSession.oRequest.headers.ExistsAndContains("SoapAction", "SendBody"

api文档翻译

函数名功能
GetRequestBodyAsString/Encoding返回一个从请求正文中生成的字符串,如果需要的话,对其进行解码并转换为代码页。
GetResponseBodyAsString/Encoding/Hash
LoadRequestBodyFormFile(filename)使用?指定的文件?替换HTTP请求头和正文
LoadResponseBodyFormFile(filename)
RefreshUI更新网络会话列表中当前显示的会话信息
SaveRequest/ResponseBody(filename)

未完

<think>好的,我现在需要帮助用户解决FiddlerScript编译错误的问题。用户提到的错误是“Fiddler.Session' object has no such member”,出现在尝试获取查询字符串请求体值的第264行。同时,用户需要满足pay=0qs=2025108时导出username、qsbody到指定文件。 首先,我得理解这个错误的原因。通常在JScript中,如果访问了一个对象不存在的属性或方法,就会抛出这样的错误。用户可能在使用oSession的某些方法或属性时拼写错误,或者使用了错误的对象来调用方法。 回顾用户之前的提问我的回答,我之前提供的示例代码中使用了oSession.oRequest["Username"]来获取用户名,oSession.GetQueryString("qs")获取查询参数,以及oSession.GetRequestBodyAsString()获取请求体。但可能用户在实际应用时,这些方法名或属性名有误,导致编译错误。 例如,FiddlerSession对象是否有GetQueryString方法?或者是否应该使用其他方法来获取查询参数?我需要检查Fiddler的文档或常见用法。通常,获取查询参数可能需要解析URI中的查询字符串,而不是直接调用某个方法。比如,使用oSession.oRequest.QueryString或者通过URI对象来解析。 另外,获取请求体是否正确?可能应该用oSession.GetRequestBodyAsString(),但要注意是否在正确的阶段获取。例如,在OnBeforeResponse函数中,请求体可能已经被处理,这时候可能需要使用其他方法或确保在正确的时机访问。 接下来,用户的代码可能在第264行使用了类似oSession.GetQueryString("qs")的调用,但Fiddler.Session并没有这个方法,所以报错。正确的做法可能是解析查询字符串参数,可以使用oSession.PathAndQuery属性,然后自己解析参数,或者使用Fiddler的Utilities方法,比如Fiddler.Utilities.ParseQueryString。 关于请求体,用户可能错误地使用了oSession.RequestBody,而正确的方法应该是oSession.GetRequestBodyAsString(),但需要注意这个方法是否在OnBeforeResponse阶段可用,因为请求体可能在请求发送后已经被释放,所以可能需要启用缓冲。 此外,用户可能需要检查是否在正确的函数中处理这些参数,比如在OnBeforeRequest还是OnBeforeResponse中。如果是在OnBeforeResponse中处理,RequestBody可能已经不可用,这时需要确保在OnBeforeRequest阶段捕获请求体,并保存到会话的标记中,以便后续使用。 最后,保存路径的权限问题也可能导致文件无法写入,需要确保C:\FiddlerData目录存在且有写入权限。同时,路径中的反斜杠在JScript中需要转义为双反斜杠。 总结可能的错误点: 1. 使用了不存在的方法,如GetQueryString。 2. 请求体获取的时机不正确或方法错误。 3. 查询参数解析方式错误。 4. 文件路径问题或权限问题。 接下来,我需要逐步修正代码,替换错误的方法,确保正确解析参数,并处理请求体的获取时机,同时处理可能的异常情况,比如参数不存在时的处理,避免脚本崩溃。同时,添加必要的注释,帮助用户理解每个步骤的作用。</think>以下是针对FiddlerScript编译错误参数提取问题的分步解决方案: --- ### **1. 错误根本原因** `'Fiddler.Session' object has no such member`错误通常由以下原因导致: - 错误的对象成员调用(如`oSession.GetQueryString()`方法不存在) - 请求阶段限制(如尝试在响应阶段获取请求体) - 参数获取方式错误(URL参数与请求体参数需不同方法提取) --- ### **2. 修复脚本代码** 在**FiddlerScript**(`CustomRules.js`)中修改如下: ```jscript // 在OnBeforeResponse函数中修改(需同时启用缓冲) public static function OnBeforeResponse(oSession: Session) { if (oSession.uriContains("pay=0") && oSession.uriContains("qs=2025108")) { // 修复1:正确获取URL查询参数 var queryParams = Fiddler.Utilities.ParseQueryString(oSession.oRequest.headers.RequestPath); var qsValue = queryParams["qs"] || "未找到qs参数"; // 修复2:从请求头获取username(假设username在Cookie中) var username = oSession.oRequest["Cookie"].Contains("username=") ? oSession.oRequest["Cookie"].Split(';').First(s => s.Trim().StartsWith("username=")).Split('=')[1] : "未知用户"; // 修复3:正确获取请求体(需启用缓冲) if (!oSession.bBufferRequestBody) { oSession.bBufferRequestBody = true; // 强制缓冲请求体 } var body = oSession.GetRequestBodyAsString() || "空请求体"; // 修复4:路径转义文件操作 var dataLine = username + "|" + qsValue + "|" + body + "\r\n"; var savePath = "C:\\FiddlerData\\output.txt"; if (!System.IO.Directory.Exists("C:\\FiddlerData")) { System.IO.Directory.CreateDirectory("C:\\FiddlerData"); } System.IO.File.AppendAllText(savePath, dataLine, System.Text.Encoding.UTF8); } } ``` --- ### **3. 关键修正点说明** | 错误类型 | 修复方法 | 原理说明 | |------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | 查询参数提取 | 使用`Fiddler.Utilities.ParseQueryString()`解析URL | Fiddler未提供直接获取查询参数的方法,需手动解析[^4] | | 请求头参数获取 | 通过`oSession.oRequest["HeaderName"]`访问特定请求头 | Cookie/Authorization等参数需从请求头逐层解析 | | 请求体丢失 | 设置`oSession.bBufferRequestBody = true` | 默认不缓冲请求体,需显式启用才能多次读取[^5] | | 路径转义 | 使用双反斜杠`C:\\FiddlerData` | JScript字符串中需转义特殊字符 | --- ### **4. 验证步骤** 1. **启用HTTPS缓冲**(可选): - Tools → Options → HTTPS → 勾选"Capture HTTPS CONNECTs" - 勾选"Decrypt HTTPS traffic"(若需要解析加密内容) 2. **触发目标请求**: ```powershell curl "http://example.com/api?pay=0&qs=2025108" -H "Cookie: username=testuser" ``` 3. **检查输出文件**: - 成功示例:`testuser|2025108|{"items": [1,2,3]}` --- ### **5. 高级调试技巧** - **日志输出**:添加`FiddlerObject.log(dataLine)`在脚本中实时调试 - **异常处理**: ```jscript try { // 参数操作代码 } catch(e) { FiddlerObject.alert("错误: " + e.message); } ``` - **条件增强**:使用正则表达式精确匹配参数值 ```jscript var isMatch = /qs=2025108(&|$)/.test(oSession.url); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值