FiddlerScript 定制Rule


一、一段說明

由於筆者項目后端是用PHP開發,調試用的是xdebug擴展,IDE用的是PhpStorm,當要進行項目調試的時候,實際上是通過建立的Php Remote Debug。如圖所示:

配置的Ide Key為XDEBUG。

這樣,在php項目中,可以將調試模式一直打開,只要請求的URL中包含cookie且鍵值為:XDEBUG_SESSION=XDEBUG(這里的值XDEBUG就是上面配置的Ide Key的內容),就能自動在斷點處斷下來。

之前實現的方式為用Chrome的Xdebug Helper插件,配置IDE key,如下圖:

並在本地需要調試的頁面上啟用插件

這樣來觸發IDE中的調試斷點。

但。。我們有Fiddler,知道了上面斷點觸發的機制其實是訪問的URL多加了一個cookie值后,其實就好辦了,完全可以通過Fiddler來實現。

二、正文

其實想想,我們要實現這個功能的話,只需要讓Fiddler對發出去的請求自動增加一條cookie值就可以了。

剛好,FiddlerScript里面的OnBeforeRequest函數可以滿足我們的要求。

首先,打開Fiddler,找到FiddlerScript的文件,並定向到OnBeforeRequest位置

在里面增加如下內容:

var sCookie = oSession.oRequest['cookie'];
if(sCookie.IndexOf('XDEBUG_SESSION') == -1){
     sCookie += ';XDEBUG_SESSION=XDEBUG';
     oSession.oRequest['cookie'] = sCookie;
}

但是這樣的話,我們的所有請求都會帶上這個cookie了,這顯然是不合理的。那么我們需要一個開關來控制什么時候帶上這條cookie。

這樣的話,就在Rules菜單里面增加一個XDEBUG的開關,用於控制請求是否帶此cookie。

在FiddlerScript類里面增加一個控制菜單的靜態變量,如下圖:

然后將OnBeforeRequest里面的代碼改成如下的樣子:

if (m_Xdebug){
    var sCookie = oSession.oRequest['cookie'];
    if(sCookie.IndexOf('XDEBUG_SESSION') == -1){
        sCookie += ';XDEBUG_SESSION=XDEBUG';
        oSession.oRequest['cookie'] = sCookie;
    }
}

最后,為了方便辨認,讓Fiddler將帶有XDEBUG_SESSION cookie的URL標記出來,在上面的后面增加如下一條內容:

if (oSession.oRequest["cookie"].IndexOf("XDEBUG_SESSION") != -1){
    oSession["ui-color"] = "#D17C2E";    
    oSession["ui-backcolor"] = "#f2f2f2"; 
}

然后點擊FiddlerScript左上角的Save Script就OK了。

現在去Rules菜單中,把我們剛剛配置的XDEBUG菜單勾上,就能發現請求的URL中帶有上面配置的cookie了,而且左邊Session列表的顏色也變成了剛剛配置的顏色。

三、最后

但其實這樣也不是特別方便。所以后來筆者實現了按X鍵,則將選擇的Session自動增加cookie並發送,這樣就更加方便了。只不過那份script文件在公司電腦上,時隔已久,已經忘了當時怎么寫的了,等想起來或者回公司后再來補坑。

另:我們剛剛自定義的FiddlerScript文件其實保存在C:\%Users%\Documents\Fiddler2\Scripts中文件名為CustomRules.js。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM