我们来看一下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 作为第三个参数.