FiddlerScript 是Fiddler 的一项非常强大的功能,它允许你增强Fiddler UI,添加新的特性,修改请求与响应内容等等。。。

1.编写FiddlerScript

FiddlerScript 基于JScript.NET 语言。在Fiddler 中点击菜单“Rules > Customize Rules”打开FiddlerScript Editor 编辑器,在这里可以编写Fiddler Script 脚本,只要一保存,Fiddler 将会重新编译脚本并自动加载,如果加载成功,则会播放声音并在Fiddler 状态栏显示"CustomRules.js was loaded at <datetime>" 提示信息,如果编译失败,将会显示错误提示信息。

如果你没有安装FiddlerScript Editor 插件,也可以在其他编辑器编写脚本,但是推荐使用FiddlerScript Editor编辑器,因为它具有语法高亮以及自动完成功能,下载地址http://fiddler2.com/fiddlerscript-editor。

如果你想使用其他编辑器编写FiddlerScript,可以在Tools > Fiddler Options 中设置,如下设置使用notepad++作为编辑器:

如果编写脚本时需要引用第三方.net程序集,可以在按如下方式添加:

a.在References文本框中填写需要引用的程序集地址,如果有多个以分号分隔。

b.也可将程序集注册到GAC中,或者将程序集复制到Fidder.exe安装的目录下。

添加好程序集之后,就可以在编写脚本时用Import语句导入程序集的命名空间。

编写的自定义脚本文件CustomRules.js 保存在用户的我的文档目录下:

win7系统位于:C:\Users\[your user]\Documents\Fiddler2\Scripts\

xp系统位于: C:\Documents and Settings\[your user]\My Documents\Fiddler2\Scripts\

如果不想再使用自定义规则时,可以删除些文件,下次启动Fiddler 时,FiddlerScript Editor将会使用安装目录下的SampleRules.js 重新生成该文件。

2.FiddlerScript 中的主要方法

你的FiddlerScript 文件中包含一个静态类Handlers,一般来说,你的代码应该写在这个类的静态方法中。

Fiddler 运行时会自动执行一些" Application event methods":

static function OnBoot fiddler 启动时调用
static function OnShutdown fiddler关闭时调用
static function OnAttach fiddler注册成系统代理时调用
static function OnDetach fiddler 取消注册系统代理时调用
static function Main 在每次fiddler启动时和编译CustomRules.js 脚本时调用。

 

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

static function OnBeforeRequest(oSession: Session)

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

static function OnBeforeResponse(oSession: Session)

// 在个方法中包含Fiddler 命令,在Fiddler界面中左下方的QuickExec Box,如果你的脚本处理了指定的命令,则返回true,否则返回false.

static function OnExecAction(sParams: String[])

3.FiddlerScript 与Attributes

Handlers 类允许你使用attributes 注解对外暴露的字段或者方法,可以使这些字段出现在Fiddler UI界面中。

使用BindUIColumn attribute 为方法添加注解,可以添加列到web 会话列表中:

public static BindUIColumn("Method", 60)
function static FillMethodColumn(oS: Session): String {
return oS.RequestMethod;
}

只要保存脚本就可以看到fiddler会话列表多了一个请求方式列,标记当前请求的方式。

使用QuickLinks attribute 添加最顶层的菜单:

QuickLinkMenu("&Links")
QuickLinkItem("财付通", "https://www.tenpay.com")
QuickLinkItem("支付宝", "https://www.alipay.com")
public static function DoLinksMenu(sText: String, sAction: String)
{
Utilities.LaunchHyperlink(sAction);
}

保存脚本将会看到Fiddler 最上面多了一个菜单项,点击菜单项并可以打开相应的网站

4.修改Session在Fiddler的显示样式

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

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

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

5.Fiddler Script中修改Cookie

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

// 删除所有的cookie

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

// 新建cookie

oSession.oRequest.headers.Add("Cookie", "username=testname;loginpwd=123456");

注意: 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;
}

6.在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");

 

7.其它参考资料

JScript.NET语言参考:http://msdn.microsoft.com/en-us/library/z688wt03(VS.80).aspx

控制Session 的UI样式:http://www.fiddlerbook.com/Fiddler/dev/SessionFlags.asp

Fiddler Script 的官方帮助文档:http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp

修改Fiddler 请求与响应:http://fiddler2.com/documentation/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse

Fiddler Blog: http://www.telerik.com/automated-testing-tools/blog/eric-lawrence.aspx

认识FiddlerScript的更多相关文章

  1. FiddlerScript修改特定请求参数下的返回值

    使用场景: api/Live/GetLiveList接口: (1)Type为1,接口返回直播列表 (2)Type为2,接口返回回放列表 现在想修改直播列表的返回值 思路: 利用FiddlerScrip ...

  2. FiddlerScript开发

    1.为Fiddler会话列表添加自定义列 只需要为你的方法(方法名任意)添加BindUIColumn Attribute 就可以添加自定义列到Session List,下面的代码添加Method列到会 ...

  3. FiddlerScript高级技巧---自定义Fiddler菜单

    Tips 书接上回, Fiddler插件 在团队内部试用后,效果很不错,小伙伴们也提出了很多改进的建议: 最近一段Fiddler使用的仍较为频繁,以前碰到一些特殊测试需求时,总是自己在FiddlerS ...

  4. FiddlerScript学习一:改动Request或Response

    前两天因项目须要,简单看了一下FiddlerScript,功能挺强的.今天有时间细致看一下,做个笔记. 改动Request或Response 改动Request和Response要在FiddlerSc ...

  5. Understanding FiddlerScript

    Understanding FiddlerScript FiddlerScript is one of the most powerful features in Fiddler; it allows ...

  6. 用Fiddler模拟低速网络环境

    有时候宽频网路用习惯了… 在开发的过程就比较少去考虑最佳化的问题… 但当有人反应说「你的网页好慢」甚至当网路速度慢,会造成你的网页跳出什么啊哩不哒的bug时要如何重现呢? 我们可以用Fiddler 这 ...

  7. [fiddler] 使用fiddler script自定义代理规则

    场景 fiddler作为调试代理工具,可以捕获电脑与互联网之间所有http通讯. 通过可视化操作或命令行可以按某些规则截获特定请求并修改,但当我们需要批量对请求进行更复杂的逻辑操作时,则不是很方便. ...

  8. Fiddler源代码分享

    frmViewer.cs: namespace Fiddler{    using Microsoft.Win32;    using System;    using System.Collecti ...

  9. fidder 使用教程

    fidder 使用教程 1. Fiddler 是什么? Fiddler是用C#编写的一个免费的HTTP/HTTPS网络调试器.英语中Fiddler是小提琴的意思,Fiddler Web Debugge ...

随机推荐

  1. sql2005导出数据字典

    右击要导出的数据库,点击 新建视图 粘贴下面代码 SELECT 表名= then d.name else '' end, 表说明= then isnull(f.value,'') else '' en ...

  2. 用angular实时获取本地localStorage数据,实现一个模拟后台数据登入的效果

    研究了一上午,终于做出了,实时获取本地localStorage来模拟注册登入~~~ <!DOCTYPE html><html><head lang="en&qu ...

  3. Spring boot 1.3.5 RELEASE 官方文档中文翻译--目录

    说明: 打算利用闲暇时候翻译一下Spring boot的官方文档,翻译的版本是1.3.5 RELEASE. 做这件事的目的呢有四: 国内中文的Spring boot资料实在不多,希望能给后来人一点小小 ...

  4. c#基础学习汇总----------继承

    封装,继承,多态.这是面向对象的思想,也可以说是最基本的东西.说到继承,直接的说他就是面向对象中类与类之间的一种关系.通过继承,使得子类具有父类公有的受保护访问权限的属性和方法,同时子类可以通过加入新 ...

  5. UVa11384

    题意:给定正整数n,求把1,2,--,n中所有书都变成0的最少操作次数,每次操作可从序列中选择一个或多个整数,同时减去一个相同的正整数. 分析:如1,2,3,4,5,6, 第一步将4,5,6同时减4, ...

  6. Unity3D编程回忆录,Unity3d视频教程,教父团队倾情之作

    之前一直在看Unity3d的视频教程,包括很多老外的视频教程,老外的教程确实不错,技术含量很高,而且讲得很激情,让我有种恨不得一秒钟就想吧unity3d学个精通的冲动,只是,毕竟是英语教程,没办法,哎 ...

  7. JAVA MemCache 史无前例的详细讲解【转】

    非原创转自:http://nhy520.iteye.com/blog/1775893 这篇文章是我看到的介绍的比较详细的,入门级别算是足足够了 Memcach什么是Memcache Memcache集 ...

  8. excel 导入功能

    一:示例代码 //InputStream fis = new FileInputStream(tomcaturl+this.awardTask.getFileRoute());//可以通过上述方式获得 ...

  9. Mysql MyISAM数据库批量转换表引擎为Innodb

    Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可 ...

  10. 同时存在两个或多个homestead 虚拟box

    开发中发现,不同版本的homestead 里面的环境各不相同,里面的node,npm等版本都不一致,如果需要添加 不同版本的homestead同时存在可以按照以下办法处理. tips: 提供可以离线下 ...