通過前一篇博客 【小坦克: Fiddler教程】,我們了解了Fiddler的基本用法, 現在我們來看看Fiddler的高級用法. Fiddler Script。 Fiddler中的script 可以讓我們自動修改Http request和Response 的內容。 而不用手動地去下"斷點"來修改http Request或Response中的值。
閱讀目錄
- Fiddler的作者
- 如何向Fiddler的作者請教
- 關於Fiddler Script 和Jscript.NET
- Fiddler Script 是用JScript.NET語言寫的
- 安裝Fiddler Script Editor
- 給Fiddler添加菜單
- 修改Session在Fiddler的顯示樣式
- 如何在Fiddler Script中修改Cookie
- 如何在Fiddler Script中修改Request 中的body
Fiddler的作者
Fiddler 的作者是 Eric Lawrence 是個大師級的人物, 目前在微軟總部西雅圖工作。 他的博客是: http://www.ericlawrence.com/Eric/
博客中能看到他的簡歷,以及一些生活照.
遇到問題如何向Fiddler的作者請教
Eric Lawrence 在Google 論壇中建了一個Fiddler 的討論組, 地址是:https://groups.google.com/forum/?fromgroups#!forum/httpfiddler
在這里Fiddler的使用者如果遇到任何問題,都可以這論壇里直接問Eric Law. Eric Law一般都會很快答復你。 在問問題之前,請搜索下。因為你的問題很可能別人早就問過了。
關於Fiddler Script
Fiddler 包含了一個腳本文件可以自動修改Http Request 和Response.這樣我們就不需要手動地下"斷點"去修改了,
實際上它是一個腳本文件CustomRules.js
位於: C:\Documents and Settings\[your user]\My Documents\Fiddler2\Scripts\CustomRules.js 下
你也可以在Fiddler 中打開CustomRules.js 文件, 啟動Fiddler, 點擊菜單Rules->Customize Rules...
Fiddler Script 的官方幫助文檔必須認真閱讀, 地址是:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp
Fiddler Script 是用JScript.NET語言寫的
我從來沒聽說過JScript.NET語言,可能是JScript的升級版吧。 寫起來有點類似C#
安裝Fiddler Script Editor
你可以直接用notepadCustomRules.js文件,
強烈推薦下載 Fiddler Script Editor 地址是: http://www.fiddler2.com/fiddler/fse.asp
Fiddler Script Editor 提供了語法高亮,以及智能提示的功能, 如下圖:
CustomRules.js中的主要方法
// 在這個方法中修改Request的內容, 我們用得最多,
static function OnBeforeRequest(oSession: Session)
// 在這個方法中修改Response的內容,
static function OnBeforeResponse(oSession: Session)
// 在個方法中包含Fiddler 命令。 在Fiddler界面中左下方的QuickExec Box
static function OnExecAction(sParams: String[])
給Fiddler添加菜單
Fiddler可以模擬各種瀏覽器,你可以通過點擊菜單 Rules->User-Agents
不過好像沒有Iphone 4S safari 的, 我們現在添加一個。 先查詢在網上Iphone 4S safari 的user-Agents, 然后添加如下代碼代碼就可以了
RulesStringValue(23, "Iphone 4S safari", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7")
保存腳本, 重啟Fiddler就可以看到菜單中多了個Iphone 4s
你可以把你常用的操作,都定義成一個menu,
修改Session在Fiddler的顯示樣式
我們可以控制Session在Fiddler中顯示的樣式, 具體文檔是: http://www.fiddler2.com/Fiddler/dev/SessionFlags.asp
把這段腳本放在OnBeforeRequest(oSession: Session) 方法下,並且點擊"Save script", 這樣所有的cnblogs的會話都會顯示紅色.
if (oSession.HostnameIs("www.cnblogs.com")) {
oSession["ui-color"] = "red";
}
運行效果如
如何在Fiddler Script中修改Cookie
cookie其實就是request 中的一個header.
// 刪除所有的cookie
oSession.oRequest.headers.Remove("Cookie");
// 新建cookie
oSession.oRequest.headers.Add("Cookie", "username=testname;testpassword=P@ssword1");
注意: 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; }
如何在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");
附: Fiddler 系列教程, (連載中, 敬請期待)