我们来看一下Fiddler的可扩展性,现在好的软件不是自己做到最好,而是开放一个接口给互联网的程序员们,
让大家为这个软件增添更多的功能。同时也可以使这个年代想要个性的人们定制属于自己风格的软件。我们熟知的就有Firefox、Eclipse。
首先声明:今天所讲的内容属于Fiddler的高级应用,一般有此需求的人不多。目前没有此需求的人,可以不看本节内容。
今天我们来配置Fiddler中的Web会话列表顶部的列的内容。
顶部列大小的调整、前后位置的调整、和会话内容的排序。
通过使用鼠标拖动一个列到其它列的边缘然后放开鼠标,这样就可以调整列头在整个列表中的前后顺序。通过使用鼠标拖动一个列的边缘就可以改变本列的大小。通过单击某一列的列头就可以对本列的会话列表进行排序。
Fiddler会记住整个列的布局设置,包括前后列的顺序,大小等。当Fiddler重启之后,就会恢复这些布局,但是Fiddler不记住对会话列表排序功能,通常,在Fiddler重启之后,它会按照ID的升序来对会话列表进行排序。
添加自定义列
你可以通过三种方式添加自定义列。
1.使用QuickExec命令行为当前的调试实例添加一个自定义列。
在Fiddler 2.2.8.5及其以上版本,你可以通过使用QuickExec命令行添加一个自定义列。
具体语法如下:
cols add [Title] FlagName
你可以键入下面的命令:
cols add @Request.Accept
或者
cols add "Client IP Address" X-CLIENTIP
想要获取合法的flagnames接着看第三种方法。
注意:通过QuickExec,命令行添加的列在每一次Fiddler重启之后都会被删除,
想要创建永久性的自定义列,请接着往下看。。。
2.FiddlerScript BindUIColumn Attribute
通过FiddlerScript, 你可以添加一个BindUIColumn方法。
例子代码
public static BindUIColumn("HTTPMethod")
function CalcMethodCol(oS: Session){
if (null != oS.oRequest) return oS.oRequest.headers.HTTPMethod; else return String.Empty;
}
或者
public static BindUIColumn("Time Taken")
function CalcTimingCol(oS: Session){
var sResult = String.Empty;
if ((oS.Timers.ServerDoneResponse > oS.Timers.ClientDoneRequest))
{
sResult = String.Format("{0:h:mm:ssss.ffff}",
(oS.Timers.ServerDoneResponse - oS.Timers.ClientDoneRequest));
}
return sResult;
}
Fiddler将会在每一个会话中运行这个方法来生成自定义列。
注意:为了避免出现异常或者错误,一定要确保你的代码足够的强壮,
在调用对象之前一定要先确保对象存在!
3.FiddlerScript AddBoundColumn
还可以在FiddlerScript中调用AddBoundColumn() 方法。
第一个参数是要显示的列名,第二个参数是默认的列的宽度,第三个参数是一个Fiddler Session Flag 字符串,或者一个以@为前缀的请求头或者响应头的名字,或者一可以返回字符串的JavaScript函数。
例子代码:
static function Main()
{
FiddlerObject.UI.lvSessions.AddBoundColumn("ClientPort", 50, "X-ClientPort");
FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie1", 60, getSentCookie);
FiddlerObject.UI.lvSessions.AddBoundColumn("SentCookie2", 60, "@request.Cookie");
FiddlerObject.UI.lvSessions.AddBoundColumn("ReturnedCookie", 60, "@response.Set-Cookie");
}
static function getSentCookie(oS: Session){ if (null != oS.oRequest) return oS.oRequest["Cookie"]; }
通过 IFiddlerExtension, 你可以使用AddBoundColumn 方法, 传递一个 getColumnStringDelegate 作为第三个参数.