常常有人說抓包抓包,很極客的感受,其實就是利用工具分析網絡請求和響應而已。用工具,誰不會呢?對吧。剛好有個QA同窗曾問我,怎麼模擬出這種狀況,怎麼模擬出那種狀況,等寫完就把博客連接發給她好了。json
本文介紹的工具是 Fiddler,它可以在本機和服務端之間創建一個代理,經過這個代理,能夠對全部通過的請求和響應進行攔截、修改、分析等。理論上說,只要你使用的軟件支持代理,均可以用 Fiddler 進行攔截,包括瀏覽器、命令行等。api
相似的軟件有不少,好比 WireShark、HttpWatch 等,若是隻是模擬發請求的話,Chrome 中有幾個插件也很不錯,好比 Postman、REST Client 等。瀏覽器
不一樣於服務端的 Session,這裏僅僅指一次HTTP請求而已。會話面板在工具左側,以下圖所示。cookie
圖中顯示了三條請求,每一列的具體含義都很清晰,認識英文單詞就能懂了。網絡
只是左邊 # 號下的圖標,幫各位找了一下,見下圖。異步
默認狀況下,一旦開啓 Fiddler,就會走它的代理。有時候你想暫停這種行爲,那請看到左下方有個狀態欄。工具
單擊一下左邊的 Capturing,就能中止攔截,想再開啓,就再單擊一下。佈局
它的右邊是會話的來源,能夠設置僅僅攔截瀏覽器發出的請求。post
再右邊有三種選擇:一、在請求發出以前進行斷點;二、在響應回來的時候進行斷點;三、不設斷點。測試
隨便單擊一條會話,右側就會顯示詳細信息。
題外話,我以爲教程的意義在於,當你對某種新事物不熟悉的時候,幫助你瞭解一下而已。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 的提示,很是顯眼。
其實,當你看到它的時候,就已經會了第一個命令
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 的官方文檔上已經寫得很全了,我只是稍微結合了平時的使用經驗,僅僅把經常使用的功能羅列一下,但願能夠幫助各位更快上手。畢竟,磨刀不誤砍柴工。