一. Fiddler內(nèi)置命令。
上一節(jié)(使用Fiddler進行抓包分析)中,介紹到,在web session(與我們通常所說的session不是同一個概念,這里的每條HTTP請求都成為一個session)界面中可以看到Fiddler抓取的所有HTTP請求.而為了更加方便的管理所有的session, Fiddler提供了一系列內(nèi)置的函數(shù)用于篩選和操作這些session(習慣命令行操作Linux的童鞋應該可以感受到這會有多么方便).輸入命令的位置在web session管理面板的下方(通過快捷鍵alt+q可以focus到命令行).
Fiddler內(nèi)置的命令有如下幾種:
1. select命令。
選擇所有相應類型(指content-type)為指定類型的HTTP請求,如選擇圖片,使用命令select image.而select css則可以選擇所有相應類型為css的請求,select html則選擇所有響應為HTML的請求(怎么樣,是不是跟SQL語句很像?)。如圖是執(zhí)行select image之后的結(jié)果:
2. allbut命令。
allbut命令用于選擇所有響應類型不是給定類型的HTTP請求。如allbut image用于選擇所有相應類型不是圖片的session(HTTP請求),該命令還有一個別名keeponly.需要注意的是,keeponly和allbut命令是將不是該類型的session刪除,留下的都是該類型的響應。因此,如果你執(zhí)行allbut xxxx(不存在的類型),實際上類似與執(zhí)行cls命令(刪除所有的session, ctrl+x快捷鍵也是這個作用)
3. ?text命令
選擇所有 URL 匹配問號后的字符的全部 session
4. >size 和 <size命令
選擇響應大小大于某個大小(單位是b)或者小于某個大小的所有HTTP請求
5. =status命令
選擇響應狀態(tài)等于給定狀態(tài)的所有HTTP請求。
例如,選擇所有狀態(tài)為200的HTTP請求:=200
6. @host命令
選擇包含指定 HOST 的全部 HTTP請求。例如:@csdn.NET
選擇所有host包含csdn.net的請求
7. Bpafter, Bps, bpv, bpm, bpu
這幾個命令主要用于批量設(shè)置斷點
Bpafter xxx: 中斷 URL 包含指定字符的全部 session 響應
Bps xxx: 中斷 HTTP 響應狀態(tài)為指定字符的全部 session 響應。
Bpv xxx: 中斷指定請求方式的全部 session 響應
Bpm xxx: 中斷指定請求方式的全部 session 響應。等同于bpv xxx
Bpu xxx:與bpafter類似。
當這些命令沒有加參數(shù)時,會清空所有設(shè)置了斷點的HTTP請求。
更多的其他命令可以參考Fiddler官網(wǎng)手冊。
二. 使用Fiddler進行HTTP斷點調(diào)試。
這是Fiddler又一強大和實用的工具之一。通過設(shè)置斷點,F(xiàn)iddler可以做到:
1. 修改HTTP請求頭信息。例如修改請求頭的UA, Cookie, Referer 信息,通過“偽造”相應信息達到達到相應的目的(調(diào)試,模擬用戶真實請求等)。
2. 構(gòu)造請求數(shù)據(jù),突破表單的限制,隨意提交數(shù)據(jù)。避免頁面js和表單限制影響相關(guān)調(diào)試。
3. 攔截響應數(shù)據(jù),修改響應實體。
為什么以上方法是重要的?假設(shè)js前端程序員和服務器程序員是分工合作的,js程序員想要調(diào)試Ajax請求的功能,這樣便不必等待服務器端程序員開發(fā)好所有接口之后再開始開發(fā)js端的ajax請求功能,因為通過“模擬”真實的服務器端的響應,便可以保證功能的正確性,而服務器端開發(fā)程序員,只要保證最終的響應是符合規(guī)定的即可。這大大簡化了程序開發(fā)的效率,當然也降低了不同業(yè)務線程序員聯(lián)調(diào)的難度。
有兩種方法設(shè)置斷點:
1.fiddler菜單欄->rules->automatic Breakpoints->選擇斷點方式,這種方式下設(shè)定的斷點會對之后的所有HTTP請求有效。
有兩個斷點位置:
a. before response。也就是發(fā)送請求之后,但是Fiddler代理中轉(zhuǎn)之前,這時可以修改請求的數(shù)據(jù)。
b.after response。也就是服務器響應之后,但是在Fiddler將響應中轉(zhuǎn)給客戶端之前。這時可以修改響應的結(jié)果。
2.命令行下輸入。Bpafter xxx或者bpv,bpu,bpm等設(shè)置斷點。這種斷點只針對特定類型的請求。
我們以本地的web項目為例,演示如何簡單的設(shè)置HTTP斷點:
1.首先設(shè)置Firefox的代理,使之可以抓取所有的HTTP請求(localhost的請求,也可以在filter中設(shè)置只抓取intranet請求),設(shè)置如下圖所示:
2. 這時用web打開本地的項目。頁面的內(nèi)容為:
4. 設(shè)置響應后斷點(after response breakpoint),可以通過命令行設(shè)置:bpafter localhost。鍵入回車之后,web再次訪問文件,通過Fiddler的web session界面可以看到,請求已經(jīng)被掛起來了,而web瀏覽器也一直處于加載的狀態(tài)。觀察右側(cè)的inspector面板下,也出現(xiàn)了新的東西:
這時我們就可以修改響應的信息了。修改過程為:
切換到textView子面板,選擇需要修改的部分,然后點擊 “run to complete“,便可回送修改后的響應。假設(shè)我們修改后的內(nèi)容如下:
點擊執(zhí)行后,打開剛剛的web界面??梢钥吹降捻撁娴淖兓?。
可見,頁面的響應已經(jīng)有了相應的變化。這就是響應后斷點。當然實際應用中,斷點的設(shè)置和響應的修改會比這復雜的多,這里只是基本的示例。
終止斷點的方式有:
1. 在inspector界面點擊“run complete“即會終止本次HTTP請求的斷點。
2. 輸入Go命令,也會使得當前的請求跳過斷點。
3. 在rules->auto breakpoint中disabled斷點即可。
總之,F(xiàn)iddler的斷點功能非常強大,關(guān)于它的進一步學習和應用,需要一個不斷積累和摸索的過程。