Fiddler實用教程

常常有人說抓包抓包,很極客的感受,其實就是利用工具分析網絡請求和響應而已。用工具,誰不會呢?對吧。剛好有個QA同窗曾問我,怎麼模擬出這種狀況,怎麼模擬出那種狀況,等寫完就把博客連接發給她好了。json

本文介紹的工具是 Fiddler,它可以在本機和服務端之間創建一個代理,經過這個代理,能夠對全部通過的請求和響應進行攔截、修改、分析等。理論上說,只要你使用的軟件支持代理,均可以用 Fiddler 進行攔截,包括瀏覽器、命令行等。api

相似的軟件有不少,好比 WireShark、HttpWatch 等,若是隻是模擬發請求的話,Chrome 中有幾個插件也很不錯,好比 Postman、REST Client 等。瀏覽器

基本術語

會話(Session)

不一樣於服務端的 Session,這裏僅僅指一次HTTP請求而已。會話面板在工具左側,以下圖所示。cookie

Session

圖中顯示了三條請求,每一列的具體含義都很清晰,認識英文單詞就能懂了。網絡

只是左邊 # 號下的圖標,幫各位找了一下,見下圖。異步

會話圖標

默認狀況下,一旦開啓 Fiddler,就會走它的代理。有時候你想暫停這種行爲,那請看到左下方有個狀態欄。工具

狀態欄

單擊一下左邊的 Capturing,就能中止攔截,想再開啓,就再單擊一下。佈局

它的右邊是會話的來源,能夠設置僅僅攔截瀏覽器發出的請求。post

再右邊有三種選擇:一、在請求發出以前進行斷點;二、在響應回來的時候進行斷點;三、不設斷點。測試

審查(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

bpafter

當知足條件的響應回來時,選中該會話,就能夠看到如圖所示的面板。選擇 Raw 視圖(其餘也能夠,Raw 能夠修改更多的內容),而後能夠清楚地看到,服務端返回的內容是

{name: 'Jarvis', gender: 'M'}

把上面的 M 修改爲 F,而後單擊「Run to Completion」,就能把修改後的返回值送還給瀏覽器了。

自動化呢?沒錯,人每每喜歡偷懶,若是每次要修改,豈不是很麻煩。

自動響應

  • 選中想要攔截的請求,好比 /api/foo

  • 而後在 Request 面板選擇 AutoResponder

  • 再選擇 「Add Rule」

  • 在最下面的下拉框選擇 「Create New Response...」

  • 而後 「Save」

此時會彈出一個對話框,跟 Response 面板的佈局同樣,在上面能夠編輯返回值。

或者你直接把定義好的返回內容保存成文件,在剛纔那個下拉框中選擇該文件就好了。

模擬請求

右側的 Composer 窗口能夠模擬發送請求。

Composer

剛打開這個窗口的時候,應該是一片空白。你能夠從左側會話列表拖一個會話過去,這樣就有預填的信息了,修改一下參數,點「Execute」,piu,一條請求就發送出去了。

接着在會話列表就能夠查看服務端的返回值。

小結

其實 Fiddler 的官方文檔上已經寫得很全了,我只是稍微結合了平時的使用經驗,僅僅把經常使用的功能羅列一下,但願能夠幫助各位更快上手。畢竟,磨刀不誤砍柴工。

相關文章
相關標籤/搜索