Fiddler實用教程
經常有人說抓包抓包,很極客的感覺,其實就是利用工具分析網絡請求和響應而已。用工具,誰不會呢?對吧。恰好有個QA同學曾問我,怎么模擬出這種情況,怎么模擬出那種情況,等寫完就把博客鏈接發給她好了。
本文介紹的工具是 Fiddler,它能夠在本機和服務端之間建立一個代理,通過這個代理,可以對所有經過的請求和響應進行攔截、修改、分析等。理論上說,只要你使用的軟件支持代理,都可以用 Fiddler 進行攔截,包括瀏覽器、命令行等。
類似的軟件有很多,比如 WireShark、HttpWatch 等,如果只是模擬發請求的話,Chrome 中有幾個插件也很不錯,比如 Postman、REST Client 等。
基本術語
會話(Session)
不同于服務端的 Session,這里僅僅指一次HTTP請求而已。會話面板在工具左側,如下圖所示。
圖中顯示了三條請求,每一列的具體含義都很清晰,認識英文單詞就能懂了。
只是左邊 # 號下的圖標,幫各位找了一下,見下圖。
默認情況下,一旦開啟 Fiddler,就會走它的代理。有時候你想暫停這種行為,那請看到左下方有個狀態欄。
單擊一下左邊的 Capturing,就能停止攔截,想再開啟,就再單擊一下。
它的右邊是會話的來源,可以設置僅僅攔截瀏覽器發出的請求。
再右邊有三種選擇:1、在請求發出之前進行斷點;2、在響應回來的時候進行斷點;3、不設斷點。
審查(Inspector)
隨便單擊一條會話,右側就會顯示詳細信息。
題外話,我覺得教程的意義在于,當你對某種新事物不熟悉的時候,幫助你了解一下而已。tutorial 和 reference 之間是有點區別的。
所以這里就挑一些足夠使用的 tab 來解釋一下。首先,這里有上下兩欄,上面是 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 的提示,非常顯眼。
其實,當你看到它的時候,就已經會了第一個命令
help
輸入 help
會帶你到命令行的幫助頁,上面列舉了所有可用的命令。不是很多,而且都很直觀。這里同樣把常用的列一下。
-
?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 ,敲回車,就能看到提示了。bp is short for breakpoint,這個能記住嗎?
模擬返回值
想要模擬返回值,首先要設置響應斷點。
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,一條請求就發送出去了。
接著在會話列表就可以查看服務端的返回值。
小結
其實 Fiddler 的官方文檔上已經寫得很全了,我只是稍微結合了平時的使用經驗,僅僅把常用的功能羅列一下,希望可以幫助各位更快上手。畢竟,磨刀不誤砍柴工。