Fiddler是最強大最好用的Web調試工具之一,它能記錄所有客戶端和服務器的http和https請求,允許你監視,設置斷點,甚至修改輸入輸出數據,Fiddler包含了一個強大的基于事件腳本的子系統,并且能使用.net語言進行擴展
你對HTTP 協議越了解, 你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能幫助你了解HTTP協議。
Fiddler無論對開發人員或者測試人員來說,都是非常有用的工具。
下載地址:https://www.telerik.com/download/fiddler
* * * * *
**Fiddler的工作原理**
Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。
當Fiddler退出的時候它會自動注銷,這樣就不會影響別的程序。
不過如果Fiddler非正常退出,這時候因為Fiddler沒有自動注銷,會造成網頁無法訪問。解決的辦法是重新啟動下Fiddler。
Fiddler,它能夠在本機和服務端之間建立一個代理,通過這個代理,可以對所有經過的請求和響應進行攔截、修改、分析等。
理論上說,只要你使用的軟件支持代理,都可以用 Fiddler進行攔截,包括瀏覽器、命令行等。類似的軟件有很多,比如 WireShark、HttpWatch 等
**Fiddler 如何捕獲Firefox的會話**
能支持HTTP代理的任意程序的數據包都能被Fiddler嗅探到,Fiddler的運行機制其實就是本機上監聽8888端口的HTTP代理。
Fiddler2啟動的時候默認IE的代理設為了127.0.0.1:8888,而其他瀏覽器是需要手動設置的,所以將Firefox的代理改為127.0.0.1:8888就可以監聽數據了。
Firefox 上通過如下步驟設置代理
> 點擊: Tools -> Options, 在Options 對話框上點擊Advanced tab - > network tab -> setting.
默認下,Fiddler不會捕獲HTTPS會話,需要你設置下, 打開Fiddler Tool->Fiddler Options->HTTPS tab
* * * * *
:-: **基本術語**
**Session:會話**
不同于服務端的 Session,這里僅僅指一次HTTP請求而已
狀態欄斷點有三種選擇:
~~~
1、在請求發出之前進行斷點;
2、在響應回來的時候進行斷點;
3、不設斷點。
~~~
**審查(Inspector):**
隨便單擊一條會話,右側就會顯示詳細信息。
這里有上下兩欄,上面是 Request,下面是 Response。
**Request (請求)中有三個比較厲害的:**
> Inspectors:選中之后,可以詳細查看請求的 Headers、Cookies,并且可以對請求體格式化,以WebForms、JSON、Raw 等方式查看。
> 具體每種方式的區別可以自己感受一下。
> 一般來說,想要查看請求的參數的話,WebForms 的方式就挺直觀的。
> AutoResponder:這個地方可以模擬服務端返回值。
> 顧名思義,當瀏覽器發出的請求滿足你設置的匹配條件的話,Fiddler 就自動響應了,并不需要走網絡。
> Composer:模擬向服務端發送請求,用于測試服務端接口是否正確。
**Response (響應)中常用的三個:**
> Headers:響應頭。比如 Content-Type、Access-Control-Allow-Origin 等這些屬性都在這個 tab 展示。
> Cookies:查看由服務端帶回來的 cookie。
> JSON:將返回的內容以 JSON 格式顯示。這個很有用,特別是當服務端返回的內容本身就是 JSON 的時候。
**QuickExec**
抱歉這么快就要講命令行,實在是因為它太有用了。
它位于狀態欄的上方,有個 QuickExec 的提示,非常顯眼。
> ?sometext:高亮包含匹配文字的會話。
> 比如 ?/foo 就可以把所有包含 /foo 的請求都找出來。
> 其他的高亮功能還有:
> =(匹配請求方法或狀態碼)、@(匹配host)、select(匹配MIME)。
> clear:清空會話面板
> keeponly:清空會話面板,僅保留指定的MIME類型。
> 比如 keeponly json 就能篩選出所有返回 json 的會話。
> go:放行所有的斷點。
**設置斷點**
按照之前介紹的,在狀態欄啟用斷點(無論是請求斷點,還是響應斷點)后,所有的請求都會中斷。
事實上,一個網頁加載時,會觸發很多異步請求。甚至在加載完成后,也還會不停地發送異步請求,比如現在很流行的二維碼登錄頁面。攔截所有請求似乎顯得不太合適。
斷點的命令行,斷點即 breakpoint,所有跟斷點相關的都是以 bp 為前綴。
~~~
bpu:請求時斷點,比如 bpu /foo
bpafter:響應時斷點,比如 bpafter /foo
bps:攔截狀態碼,比如 bps 404
bpm:攔截方法,比如 bpm post
~~~
用不帶參數的命令可以清除斷點,比如 `bpafter` 可以清除所有的響應斷點。
`url` 的匹配方式是判斷“字符串是否包含”,比如 `bpu /foo` 會攔截所有包含 `/foo` 的請求。
如果忘了這些命令,在命令行輸入 `bp` ,敲回車,就能看到提示了。
**模擬返回值**
想要模擬返回值,首先要設置響應斷點。
`bpafter /foo`
當滿足條件的響應回來時,選中該會話,就可以看圖示的面板。
選擇 Raw 視圖(其他也可以,Raw 可以修改更多的內容),然后可以清楚地看到,
服務端返回的內容是`{name: 'Jarvis', gender: 'M'}`
把上面的 M 修改成 F,然后單擊“Run to Completion”,就能把修改后的返回值送還給瀏覽器了。
自動化呢?沒錯,人往往喜歡偷懶,如果每次要修改,豈不是很麻煩。
> 選中想要攔截的請求,比如 `/api/foo`
> 然后在 Request 面板選擇 AutoResponder
> 再選擇 “Add Rule”
> 在最下面的下拉框選擇 “Create New Response...”
> 然后 “Save”
此時會彈出一個對話框,跟 Response 面板的布局一樣,在上面可以編輯返回值。
或者你直接把定義好的返回內容保存成文件,在剛才那個下拉框中選擇該文件就行了。
**模擬請求**
右側的 Composer 窗口可以模擬發送請求,剛打開這個窗口的時候,應該是一片空白。
你可以從左側會話列表拖一個會話過去,這樣就有預填的信息了,修改一下參數,點“Execute”,piu,一條請求就發送出去了。
接著在會話列表就可以查看服務端的返回值。