1. 程式人生 > >fiddler在不同場景下的強大作用

fiddler在不同場景下的強大作用

如果你是一名前端開發或者測試人員,那麼fiddler絕對是最值得掌握的工具之一。fiddler是最強大的web除錯工具之一,他能記錄所有客戶端和伺服器的http/https請求以及響應,允許你監視,允許你設定斷點除錯,甚至篡改請求和響應。
fiddler的工作原理是什麼呢?其實,每當開啟fiddler的時候,它就會自動在你的電腦上把“127.0.0.1:8888”設定為代理伺服器,並且fiddler會一直監聽8888埠,這樣的話,你的電腦上所有的請求或者響應,都會經過這個代理伺服器,瞭解了這個就好辦了。
所以,這次就讓我們來一起看下fiddler有哪些好用的功能,這些功能都能滿足什麼樣場景下的使用。
注意:本教程認為您已經對fiddler有了基本的瞭解,瞭解fiddler各個視窗代表的含義。如果您之前沒有使用過fiddler,請在網上查詢任何一篇文章,介紹的已經很詳細了。

一、篡改請求

在測試時,你一定會遇到這樣的情況,請看下面的表單(使用“http://ip.360.cn/#/ipquery”網頁進行說明):
ip地址錯誤.png

這個表單我現在輸入了一個錯誤的ip地址,結果前端就已經丟擲了ip地址錯誤的問題,限制我點選“查詢”按鈕,但我還就想知道當前端不做限制時,直接給服務端提交一個錯誤的ip,看看服務端能不能處理,那我該怎麼辦呢?
用fiddler。首先開啟fiddler,選中Rules->Automatic Breakpoints->Before Requests,或者直接點選fiddler左下角,直到出現紅色的向上箭頭(表示請求過程中設定了斷點,客戶端發出的請求被fiddler攔截了),如下圖:
上傳斷點.png

然後,我們把表單改成正常的ip地址如“202.106.212.255”,然後點選查詢。
查詢後發現頁面沒有響應,這時候看fiddler,發現ip.360.cn/IPQuery/ipquery這個請求的簽名也有一個紅色的上傳箭頭,表示我們已經成功攔截了這個請求。這時候,我們在左側點選這個請求,在右側Inspectors->TextView或者Inspectors->WebForms介面下會看到請求傳送的具體內容:
傳送的具體內容.png

我們點選紅框標註的value地方,把ip修改成“202.106.212.256”,然後點選另一個紅框標註的“Run to Completion”,這時候可以看剛才的頁面了:
彈窗.png

這時候我們就可以說,不僅前端,原來服務端對ip地址也是有校驗的。
剛才可能細心的同學會注意到,在fiddler的“Run to Completion”按鈕的左邊,還有一個按鈕叫“Break on Response”,這個按鈕是幹什麼的呢?顧名思義,剛才的“Run to Completion”指的是直接執行到這個session結束,而“Break on Response”是指在返回時再次截獲返回資料。
好了,這就是基本的篡改請求的小例子,希望大家看了後可以在工作中用到。
可能有同學會問了,你這樣操作,直接截獲了所有的請求,如果我只需要截獲一個特定請求,而其他請求我都放行,這該怎麼辦呢?這就屬於fiddler的命令列高階用法了,先透漏一下,使用bpu命令就可以,後續我們再介紹。
二、篡改返回


剛才咱們篡改的是請求內容,那能不能篡改返回內容呢?比如說,剛才ip查詢輸入框的下面是它的返回,標明瞭這個ip的地址以及運營商,那如果我想構造一個很長的返回,用來看看當返回資料很長時前端頁面會不會變形呢?
還用剛才的例子,我們先把fiddler設定成這樣:選中Rules->Automatic Breakpoints->After Responses,或者點選fiddler左下角,直到出現向下的紅色箭頭(向下箭頭表示返回過程中被fiddler攔截),如下:
向下箭頭.png

然後,我們提交一個正常的ip,如“202.106.212.255”,然後點選查詢。
現在,前端頁面仍然沒有響應,這時候我們開啟fiddler,看到了這個請求的返回值如下:
返回值.png

可以看到,返回的是一個json資料結構,其中的data的值就是要顯示在頁面上的資料。我們修改下這個data值如下:
修改返回值.png

修改後點選“Run to Completion”,然後檢視前端頁面:
修改返回後的前端頁面.png

發現前端頁面把我返回的很長的資料給截斷顯示了。
以上就是篡改返回的一個小例子,同樣希望讀者能用到實際工作中。
可能有同學又會問了,你這樣操作,直接截獲了所有的返回,如果我只需要截獲一個特返回,而其他返回我都放行,這該怎麼辦呢?這又屬於fiddler的命令列高階用法了,再透漏一下,使用bpafter命令就可以,後續我們再介紹。