我們來看一下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 作為第三個參數.