Fiddler (二) Script 用法

本文介绍FiddlerScript的使用方法,包括修改HTTP请求和响应、自定义显示样式等高级功能。还介绍了如何安装FiddlerScriptEditor以及如何向Fiddler作者求助。

通过前一篇博客 【小坦克: Fiddler教程】,我们了解了Fiddler的基本用法,  现在我们来看看Fiddler的高级用法. Fiddler Script。   Fiddler中的script 可以让我们自动修改Http request和Response 的内容。  而不用手动地去下"断点"来修改http Request或Response中的值。

 

阅读目录

  1. Fiddler的作者
  2. 如何向Fiddler的作者请教
  3. 关于Fiddler Script 和Jscript.NET
  4. Fiddler Script 是用JScript.NET语言写的
  5. 安装Fiddler Script Editor
  6. 给Fiddler添加菜单
  7. 修改Session在Fiddler的显示样式
  8. 如何在Fiddler Script中修改Cookie
  9. 如何在Fiddler Script中修改Request 中的body

 

Fiddler的作者

Fiddler 的作者是 Eric Lawrence 是个大师级的人物, 目前在微软总部西雅图工作。 他的博客是: http://www.ericlawrence.com/Eric/

博客中能看到他的简历,以及一些生活照.

 

遇到问题如何向Fiddler的作者请教

Eric Lawrence 在Google 论坛中建了一个Fiddler 的讨论组, 地址是:https://groups.google.com/forum/?fromgroups#!forum/httpfiddler

在这里Fiddler的使用者如果遇到任何问题,都可以这论坛里直接问Eric Law. Eric Law一般都会很快答复你。  在问问题之前,请搜索下。因为你的问题很可能别人早就问过了。

 

关于Fiddler Script

Fiddler 包含了一个脚本文件可以自动修改Http Request 和Response.这样我们就不需要手动地下"断点"去修改了,

实际上它是一个脚本文件CustomRules.js 

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

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

Fiddler Script 的官方帮助文档必须认真阅读, 地址是:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp

 

Fiddler Script 是用JScript.NET语言写的

我从来没听说过JScript.NET语言,可能是JScript的升级版吧。  写起来有点类似C#

 

安装Fiddler Script Editor

你可以直接用notepadCustomRules.js文件,

强烈推荐下载 Fiddler Script Editor 地址是: http://www.fiddler2.com/fiddler/fse.asp

Fiddler Script Editor 提供了语法高亮,以及智能提示的功能, 如下图:

 

CustomRules.js中的主要方法

// 在这个方法中修改Request的内容, 我们用得最多,

static function OnBeforeRequest(oSession: Session)

 

// 在这个方法中修改Response的内容,

static function OnBeforeResponse(oSession: Session)

 

// 在个方法中包含Fiddler 命令。  在Fiddler界面中左下方的QuickExec Box

static function OnExecAction(sParams: String[])

 

给Fiddler添加菜单

Fiddler可以模拟各种浏览器,你可以通过点击菜单 Rules->User-Agents

不过好像没有Iphone 4S safari 的, 我们现在添加一个。  先查询在网上Iphone 4S safari 的user-Agents, 然后添加如下代码代码就可以了

RulesStringValue(23, "Iphone 4S 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

 

你可以把你常用的操作,都定义成一个menu,

 

修改Session在Fiddler的显示样式

我们可以控制Session在Fiddler中显示的样式, 具体文档是: http://www.fiddler2.com/Fiddler/dev/SessionFlags.asp

 

把这段脚本放在OnBeforeRequest(oSession: Session) 方法下,并且点击"Save script", 这样所有的cnblogs的会话都会显示红色.

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

运行效果如

 

 

如何在Fiddler Script中修改Cookie

cookie其实就是request 中的一个header.

// 删除所有的cookie

oSession.oRequest.headers.Remove("Cookie");

 

// 新建cookie

oSession.oRequest.headers.Add("Cookie", "username=testname;testpassword=P@ssword1");


注意: Fiddler script不能直接删除或者编辑单独的一个cookie, 你需要用replace方法或者正则表达式的方法去操作cookie的string

复制代码
static function OnBeforeRequest(oSession: Session) 
{ 
     if (oSession.HostnameIs('www.example.com') && 
          oSession.uriContains('pagewithCookie') && 
oSession.oRequest.headers.Contains("Cookie")) 
     { 

     var sCookie = oSession.oRequest["Cookie"]; 

     //  用replace方法或者正则表达式的方法去操作cookie的string
     sCookie = sCookie.Replace("cookieName=", "ignoreme="); 

     oSession.oRequest["Cookie"] = sCookie; 
    } 
复制代码

 

如何在Fiddler Script中修改Request 中的body

方法一:

复制代码
static function OnBeforeRequest(oSession: Session) 
{ 
    if(oSession.uriContains("http://www.cnblogs.com/TankXiao/"))
    {
        // 获取Request 中的body字符串
        var strBody=oSession.GetRequestBodyAsString();
        // 用正则表达式或者replace方法去修改string
        strBody=strBody.replace("1111","2222");
        // 弹个对话框检查下修改后的body               
        FiddlerObject.alert(strBody);
        // 将修改后的body,重新写回Request中
        oSession.utilSetRequestBody(strBody);
    }
}
复制代码

 

方法二:  提供了一个非常简单的方法,可以直接替换body中的数据

 oSession.utilReplaceInRequest("1111", "2222");

 

转自:http://www.cnblogs.com/TankXiao/archive/2012/04/25/2349049.html

FiddlerScript 中使用 `Task.Run` 时,需要注意其运行环境和异步编程模型的限制。FiddlerScript 是基于 JScript.NET 或 C# 的脚本语言,允许通过自定义规则和逻辑扩展 Fiddler 的功能。由于 FiddlerScript 运行在 .NET 框架下,理论上支持异步操作,但在实际使用中需要特别注意线程管理和上下文切换问题。 ### 使用 `Task.Run` 的基本方法FiddlerScript 中,可以通过 `Task.Run` 启动一个后台任务来执行耗时操作,以避免阻塞主线程。以下是一个简单的示例: ```csharp static function OnBeforeRequest(oSession: Session) { if (oSession.uriContains("example.com")) { Task.Run(function() { // 执行异步操作 FiddlerObject.log("异步任务开始执行"); System.Threading.Thread.Sleep(1000); // 模拟耗时操作 FiddlerObject.log("异步任务完成"); }); } } ``` 该代码片段展示了如何在 `OnBeforeRequest` 事件中启动一个异步任务。`Task.Run` 接受一个委托作为参数,并在后台线程池中执行该委托。 ### 常见问题及解决方案 #### 1. **跨线程访问 UI 元素** 由于 `Task.Run` 在后台线程中执行,因此不能直接访问 Fiddler 的 UI 元素(如日志输出窗口)。如果需要更新 UI 或记录信息,应使用 `FiddlerObject.UI.Invoke` 来切换回主线程: ```csharp Task.Run(function() { // 耗时操作 FiddlerObject.UI.Invoke(function() { FiddlerObject.log("从后台线程更新日志"); }); }); ``` #### 2. **异常处理** 在异步任务中发生的异常不会立即抛出,而是会在任务被等待时才被引发。为了避免程序崩溃,建议使用 `try-catch` 块捕获异常: ```csharp Task.Run(function() { try { // 可能会抛出异常的操作 } catch (e) { FiddlerObject.log("捕获到异常:" + e.ToString()); } }); ``` #### 3. **性能与资源管理** 频繁调用 `Task.Run` 可能会导致线程池资源耗尽,尤其是在处理大量并发请求时。建议合理控制并发数量,并考虑使用 `SemaphoreSlim` 来限制同时执行的任务数: ```csharp var semaphore = new SemaphoreSlim(5); // 最多允许5个并发任务 Task.Run(function() { semaphore.Wait(); try { // 执行任务 } finally { semaphore.Release(); } }); ``` #### 4. **调试技巧** - 使用 `FiddlerObject.log()` 记录关键步骤的日志,帮助定位问题。 - 利用 Fiddler 的断点功能,在 `OnBeforeRequest` 和 `OnAfterResponse` 等事件中设置断点,逐步调试脚本。 - 如果遇到未处理的异常,检查是否遗漏了 `try-catch` 块或未能正确释放资源。 ### 总结 在 FiddlerScript 中使用 `Task.Run` 时,需确保异步操作不会影响主线程的稳定性,并妥善处理跨线程访问、异常捕获和资源管理等问题。通过合理设计异步逻辑,可以有效提升 Fiddler 的性能和用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值