筆者前一陣在作微信站項目的時候在調試的過程當中遇到了很多的問題,每次調試接口的時候都須要用console.log
將數據打印出來,若是有時候想要修改接口數據還很不方便。針對上面調試的痛點,筆者對Fiddler的用法進行了簡單的學習,分享一下學習的心得。javascript
首先來介紹一下Fiddler。Fiddler是位於客戶端和服務器端的HTTP代理,也是目前最經常使用的http抓包工具之一 。 它可以記錄客戶端和服務器之間的全部HTTP請求,能夠針對特定的HTTP請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至能夠修改服務器返回的數據,功能很是強大,是web調試的利器。css
是的,你沒有看錯,Fiddler這貨竟然還能設置斷點。不只如此,Fiddler還能修改請求數據或者修改返回數據。這樣在調試的時候能夠隨意的將服務器的返回數據修改爲咱們想要的數據了。除此以外,Fiddler還可以攔截手機端的數據,可以看到手機端發送的請求和請求結果,不過要進行一個小小的設置。好了,介紹了這麼多,來看一下Fiddler的原理:java
既然Fiddler是客戶端和服務器端之間的代理,那麼客戶端全部發起的請求都會通過Fiddler,而後再發送到對應的服務器;一樣,服務器全部的響應數據也會通過Fiddler再發送到客戶端。git
安裝完Fiddler,打開界面以下,整個界面能夠分爲五個部分:github
Fiddler簡單介紹完了,下面來看下Fiddler的一些配置。web
Fiddler打開後會自動更改IE的代理設置,因爲Chrome默認代理設置是跟IE關聯在一塊兒的,所以Chrome不用進行配置,可是火狐使用獨立的代理設置,所以須要單獨配置。ajax
首先查看Fiddler的監聽端口。在Fiddler中選擇Tools
=> Fiddler Options
=> connections
,打開以下界面:正則表達式
其中的Fiddler Listens on port
就是Fiddler的監聽端口,咱們只要代理到這個端口就能夠用Fiddler進行監聽了。而後把Allow remote computers to connect
這一行前面的勾打上,容許其餘電腦來鏈接。express
Firefox手動設置以下,打開工具
=> 選項
=> 高級
=> 網絡
=> 設置
,而後進行以下設置。json
不過上面的手動設置比較麻煩,咱們能夠安裝一個FiddlerHook插件,安裝好後啓用這個插件就行。
Fiddler不只可以代理電腦的請求,也可以代理手機端的請求,當咱們開發微信站或者手機站的時候,就能夠很方便咱們來進行調試。
IOS選擇對應的無線網設置,而後找到HTTP代理,服務器一欄填寫電腦的IP地址,端口號是Fiddler端口號,默認8888。
在Android中,長按所鏈接的無線網,而後修改網絡,在代理的選項卡里選擇手動。一樣,服務器一欄填寫電腦的IP地址,端口號默認8888.
默認狀況下,Fiddler不會捕獲HTTPS會話,所以若是不開啓HTTPS捕獲的話自動應答器是不會替換HTTPS的會話。打開Tools
=> Fiddler Options
=> HTTPS
彈出框須要安裝一個證書,而後全程點Yes就能夠了。
Fiddler的統計選項卡中顯示了當前Session的基本信息,在選項卡的最上方顯示的是文本信息,最下方是個餅圖,按MIME類型顯示流量。使用Statistics頁籤,用戶能夠經過選擇多個會話來得來這幾個會話的總的信息統計,好比多個請求和傳輸的字節數。
選擇第一個請求和最後一個請求,可得到整個頁面加載所消耗的整體時間。從條形圖表中還能夠分別出哪些請求耗時最多,從而對頁面的訪問進行訪問速度優化。
在左側請求數據列表中選中一條記錄會自動切換到Insprctors
面板,這個面板分爲上下兩個,上面是請求頭的一些信息,下面是返回的響應主體。
在平常工做中,有時候腳本樣式或者頁面有點問題是屢見不鮮,常常須要對文件進行修改。可是每次都須要發佈到測試環境才能看到效果很麻煩,咱們但願在本身本機就能看到調試的效果。Fiddler就提供了自動應答器這個功能,能讓咱們直接看到效果。 打開AutoResponder
面板,咱們能夠添加URL匹配規則,讓請求的URL從本地返回文件而不是從服務器。 例如如今須要將線上地址https://acexyf.github.io/
替換爲本地的一個HTML文件,首先勾選Enable rules
使全部的匹配規則生效,而後勾選Unmatched request passthrough
,讓沒有匹配到的規則經過(若是不勾選這個,打開其餘網頁會失敗)。 而後點Add rules
來新增一個匹配規則,在x下面的Rule Editor
輸入要替換的URL和本地文件的路徑,而後Save就添加成功了。
雖然這樣添加匹配成功了,可是產生了一個心得問題,因爲是匹配URL,因此只要是URL中帶有https://acexyf.github.io/
都會被替換掉,因此該域名下全部的腳本、樣式以及子頁面都會被替換,這樣顯然不利於咱們調試。可是Fiddler提供了另外的四種匹配規則。
所以修改一下咱們的匹配規則,改成EXACT:https://acexyf.github.io/
就能夠了。還有一個小Tips:
AutoResponder
面板會直接生成匹配規則。Rule Editor
的第二個輸入框旁邊的小三角找到Find a file
能夠選擇文件路徑。Test...
能夠測試匹配規則。構造器composer用來建立一個HTTP請求而後發送到服務器。能夠本身定義一個請求,也能夠講會話列表中拖拽一個已有的請求過來。
打開Composer面板,第一個就是Parsed選項卡,在表單中咱們輸入一個HTTP請求,好比對baidu.com發送一個請求。點擊Execute
按鈕,這個請求就發送出去了。這時候在會話列表中就多了一次請求。
第二個選項卡是Raw,也是原始請求,若是熟悉HTTP請求,能夠直接手動輸入。
第三個選項卡是ScratchPad,能夠同時保存多條原始請求,而後選擇性的發送。高亮選中你要發送的請求,而後點擊Execute就發送出去了。
幾個選項說明:
有時候請求刷新一個頁面會有不少的請求,看得眼花繚亂,可是絕大多數請求可能並非咱們想要的,這時候咱們就須要對請求進行一些過濾。
在Zone Filter
中有三個選項,分別過濾如下請求:
在Host Filter
中有四個選項,分別過濾如下請求
命令行QuickExec容許咱們快速的執行一些腳本命令。
select命令用來選擇全部類型爲指定類型的HTTP請求,即根據請求的content-type來選擇全部同一類型的。經常使用的select css
選擇全部的樣式請求,select image
選擇全部的圖片請求。
allbut命令用於清除除了指定類型以外的其餘HTTP請求,僅保留指定類型。例如allbut image
僅保留圖片的請求。若是跟一個不存在的類型,執行效果和csl,命令相同,清除全部的請求。
當你在問號後輸入一些文本的時候,Fiddler會高亮URL中帶有這些文本的全部請求。
大於號小於號命令選擇響應主體的大小大於(或者小於)指定大小。
等號命令用於選擇狀態碼等於指定狀態碼或者指定請求方法的會話。
選擇包含指定HOST的所有請求。
若是之後的請求的URL中帶有指定的字符串,那麼將會被加粗顯示。bold /bar.aspx
表示加粗URL帶有bar.aspx。再次執行bold
會清除加粗。
這幾個命令用於批量設置斷點。
清除請求列表。
雖然bpafter和bpu都是用於中斷URL包含指定字符的所有會話,可是打斷點的時間是不同的。bpu是在瀏覽器發送請求的時候進行斷點,能夠對請求參數進行修改;而bpafter是在服務器響應的後進行斷點,能夠對響應結果進行修改。 咱們使用用express模擬簡單的ajax請求。
var express = require('express');
var path = require('path');
var app = express();
var port = process.env.PORT || 8088;
app.get('/test',function(req,res){
var params = req.param('name') || '';
res.json({name:'request name is '+params});
});
var server=app.listen(port,function(){
console.log('server is listening on port:'+port);
});
複製代碼
咱們輸入命令 bpu /test
,而後Fiddler就會進入等待。在瀏覽器中輸入網址,這時候瀏覽器就會進入等待的狀態。在會話列表中選擇進入斷點狀態的請求,而後修改請求參數,修改完後點擊Run to Completion
結束斷點。這時候,瀏覽器頁面也結束等待,出現修改後的結果。
調試完後咱們不須要Fiddler再進行斷點,能夠輸入bpu
清除全部bpu的斷點。
一樣,咱們輸入命令 bpafter /test
,而後Fiddler就會進入等待。在瀏覽器中輸入網址,這時候瀏覽器就會進入等待的狀態。在會話列表中選擇進入斷點狀態的請求,而後修改響應結果,修改完後點擊Run to Completion
結束斷點。這時候,瀏覽器頁面也結束等待,出現修改後的結果。
調試完後咱們不須要Fiddler再進行斷點,能夠輸入bpafter
清除全部bpafter的斷點。