一、Fiddler的基本介紹
Fiddler的官方網站: http://www.telerik.com/fiddler
Fiddler官方網站提供了大量的幫助文檔和視頻教程, 這是學習Fiddler的最好資料。
Fiddler是位於客戶端和服務器之間的HTTP代理,是最強大最好用的Web調試工具之一,它能記錄所有客戶端和服務器的http和https請求,允許你監視,分析請求數據、設置斷點,甚至修改輸入輸出數據,Fiddler包含了一個強大的基於事件腳本的子系統,並且能使用.net語言進行擴展。
你對HTTP 協議越瞭解, 你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能幫助你瞭解HTTP協議。
Fiddler無論對開發人員或者測試人員來說,都是非常有用的工具。
二、同類的其它工具
同類的工具有: httpwatch, firebug, wireshark, chrome審查元素
三、Fiddler的工作原理
Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。Fiddler作爲系統代理,當啓用Fiddler時,IE的Proxy設定爲127.0.0.1:8888,因此如果你的瀏覽器在開啓Fiddler之後沒有設置相應的代理,則Fiddler可能無法捕獲到HTTP請求的。只有通過代理的流量才能被Fiddler捕獲到。訪問 127.0.0.1:8888 ,看一下效果:
當Fiddler退出的時候它會自動註銷,這樣就不會影響別的程序。不過如果Fiddler非正常退出,這時候因爲Fiddler沒有自動註銷,會造成網頁無法訪問(因爲IE代理是系統全局的[系統代理],對整個系統都是有影響的)。解決的辦法是重新啓動下Fiddler。
能支持HTTP代理的任意程序的數據包都能被Fiddler嗅探到,Fiddler的運行機制其實就是本機上監聽8888端口的HTTP代理。 Fiddler2啓動的時候默認IE的代理設爲127.0.0.1:8888。 通過 IE - Internet 選項 - 連接 - 設置 - Proxy server [高級] ,可以查看到。
而其他瀏覽器是需要手動設置的,以Firefox爲例,默認情況下,Firefox是沒有啓用代理的,所以將Firefox的代理改爲127.0.0.1:8888,Fiddler纔可以監聽Firefox瀏覽器的流量。
3.1 chrome / Firefox 瀏覽器默認不會被監聽
Fiddler安裝之後,默認會在IE瀏覽器中安裝一個Fiddler插件,所以他對IE以及國內基於IE內核實現的各種瀏覽器都能實現監聽,但是其他內核的瀏覽器默認無法監聽。
解決辦法:禁用chrome或Firefox中具有代理功能的插件,並設置127.0.0.1:8888的代理。
Firefox 上通過如下步驟設置代理
點擊: 菜單 - 選項 - 高級 - 網絡 - 設置. 並配置代理如下:
chrome 上通過SwitchSharp設置
禁用SwitchSharp或選擇“使用系統代理設置”,或者在SwitchSharp中配置一個代理項(比如名爲fiddler,指向 127.0.0.1,端口 8888),即可。
3.2 無法代理本地web服務器的訪問請求
使用Fiddler時,我們更多的是基於本地程序的調試,可惜Fiddler捕獲不了本地(localhost, 127.0.0.1)的http請求。難道Fiddler就束手無策了麼, 當然不是。
一般我們訪問安裝在本地的服務器時,使用的localhost或127.0.0.1,默認會繞過Fiddler代理。通過Fiddler特有的方式,可以使本地請求及響應被Fiddler監聽。
方法一: 在localhost後面加上: .fiddler
如請求: http://localhost:8080 -> http://localhost.fiddler:8080
方法二: 在localhost或127.0.0.1後面加上一個點即可。
如: http://localhost.:8080
3.3 無法捕獲HTTPS會話
使用Fiddler默認情況下不會捕獲HTTPS會話,需要手動設置。 打開Fiddler,Tools - Fiddler Options - HTTPS
四、Fiddler的基本界面
看看Fiddler的基本界面。主要分爲4個區域:菜單欄、工具欄、Web_Sessions、詳情和數據統計面板
4.1 Web Sessions
每一條記錄稱爲一個session,詳細的字段含義如下:
[#] - HTTP Request的順序,Fiddler 爲你生成的會話列表的ID,從1開始,根據頁面加載請求遞增。
[Result] - HTTP響應的狀態碼
[Protocol] - 會話使用的協議類型(如:HTTP/HTTPS/FTP)
[Host] - 請求的主機名
[URL] - 請求的路徑和具體文件名,也包括GET參數
[Body] - 響應返回內容的大小,以 byte 爲單位
[Caching] - 是否使用了緩存,請求的緩存過期時間以及緩存控制header等
[Process] - 發送本次請求的程序進程的名字及PID
[Content-Type] - 響應的響應頭的 Content-Type 值
[Custom] - 通過腳本設置的文本域. Learn more...
[Comments] - 通過腳本或者在會話列表中右鍵添加的註釋。
在會話列表中默認的文本的顏色從HTTP的響應的狀態繼承而來(紅色代表錯誤,黃色代表需要授權),CONNECT類型爲灰色,
還有返回類型(CSS文件爲紫色,HTML文件爲藍色,JS腳本爲綠色,圖片爲灰色)你可以通過使用ui-color 標誌位來改變和重寫列表的默認顏色。
(提示:ui-color在Fiddler的腳本配置文件中,需要安裝FiddlerScript)
爲了查看的方便每一個請求的前面都有一個圖標來表示。
4.2 詳情和數據統計面板
[Statistics] :
統計分析
[Inspectors] :
審查,可以查看該session請求、和響應報文信息。分爲上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不同格式查看每個請求和響應的內容。JPG 格式使用 ImageView 就可以看到圖片,HTML/JS/CSS 使用 TextView 可以看到響應的內容。Raw標籤可以查看原始的符合HTTP標準的請求和響應頭。Auth則可以查看授權Proxy-Authorization 和 Authorization的相關信息。Cookies標籤可以看到請求的cookie和響應的set-cookie頭信息。
[AutoResponder] :
[Composer] :
可模擬向服務器發送請求報文(創建和發送 HTTP Request)。老版本的fiddler中叫request-builder.顧名思義,可以構建相應的請求,有兩種常用的方式構建請求:
(1)Parsed 輸入請求的url之後executed即可,也可以修改相應的頭信息(如添加常用的accept, host, referrer, cookie, cache-control等頭部)後execute.
(2)Raw。使用HTTP頭部信息構建http請求。與上類似。不多敘述
[Log] :
日誌信息。
[Filters] :
Filter標籤則可以設置Fiddler的過濾規則,來達到過濾http請求的目的。最簡單如:過濾內網http請求而只抓取internet的http請求,或則過濾相應域名的http請求。Fiddler的過濾器非常強大,可以過濾特定http狀態碼的請求,可以過濾特定請求類型的http請求(如css請求,image請求,js請求等),可以過濾請求報文大於或則小於指定大小(byte)的請求。
[Timeline] : 時間線。
五、Fiddler的HTTP統計視圖
通過陳列出所有的HTTP通信量,Fiddler可以很容易的向您展示哪些文件生成了您當前請求的頁面。使用Statistics頁籤,用戶可以通過選擇多個會話來得到這幾個會話的總的信息統計,比如多個請求和傳輸的字節數。
選擇第一個請求和最後一個請求,可獲得整個頁面加載所消耗的總體時間。從扇形圖表中(Show Chart)還可以分別出哪些資源請求最多,資源分佈,從而對頁面的訪問進行訪問速度優化。
六、QuickExec命令行的使用
Fiddler的左下角有一個命令行工具叫做QuickExec,允許你直接輸入命令。(黑色的輸入框)
常見得命令有:
help 打開官方的使用頁面介紹,所有的命令都會列出來
cls 清屏 (Ctrl+x 也可以清屏)
select 選擇會話的命令
?.png 用來選擇png後綴的圖片
bpu 截獲request
Fiddler最強大的功能莫過於設置斷點了,設置好斷點後,你可以修改http Request的任何信息包括host, cookie或者表單中的數據。
1、select
選擇所有響應類型(content-type / MIME)爲指定類型(主類型或子類型都可)的HTTP請求,如選擇圖片,使用命令 select image 或者 select jpeg。而select html則選擇所有響應爲HTML的會話。
2、allbut (取反)
allbut命令用於選擇所有響應類型不是指定類型的HTTP請求。如allbut image用於選擇所有相應類型不是圖片的session(HTTP請求),該命令還有一個別名keeponly.需要注意的是,keeponly和allbut命令是將不是該類型的session刪除,留下的都是該類型的響應。因此,如果你執行allbut xxxx(不存在的類型),實際上類似與執行cls命令(刪除所有的session, ctrl+x快捷鍵也是這個作用)
3、? STRING
選擇匹配 STRING 的所有sessions。主要是 Host, URL 列進行匹配。
4、>size 和 <size (單位是 b)
選擇響應報文 Body 大於或小於size的sessions。
5、=status
選擇響應報文 Result 列等於某個響應狀態的sessions。
6、@host
選擇包含指定 Host 的所有sessions。
7、bpafter, bps , bpv, bpm, bpu
設置斷點。
七、Fiddler中設置斷點修改Request
Fiddler最強大的功能莫過於設置斷點了,設置好斷點後,你可以修改http Request的任何信息包括host, cookie或者表單中的數據。
通過設置斷點,Fiddler可以做到:
1. 修改HTTP請求頭信息。例如修改請求頭的UA, Cookie, Referer 信息,通過“僞造”相應信息達到達到相應的目的(調試,模擬用戶真實請求等)。
2. 構造請求數據,突破錶單的限制,隨意提交數據。避免頁面js和表單限制影響相關調試。
3. 攔截響應數據,修改響應實體。
爲什麼以上方法是重要的?假設js前端程序員和服務器程序員是分工合作的,js程序員想要調試Ajax請求的功能,這樣便不必等待服務器端程序員開發好所有接口之後再開始開發js端的ajax請求功能,因爲通過“模擬”真實的服務器端的響應,便可以保證功能的正確性,而服務器端開發程序員,只要保證最終的響應是符合規定的即可。這大大簡化了程序開發的效率,當然也降低了不同業務線程序員聯調的難度。
有兩個設定斷點的位置:
第一個:before response (也就是發送請求之後,但是Fiddler代理中轉之前,這時可以修改請求的數據。)
第二個:after response(也就是服務器響應之後,但是在Fiddler將響應中轉給客戶端之前。這時可以修改響應的結果。)
設置斷點有兩種方法:
第一種:打開Fiddler 點擊Rules-> Automatic Breakpoint ->Before Requests(這種方法會中斷所有的會話)
如何消除命令呢? 點擊Rules-> Automatic Breakpoint ->Disabled
第二種: 在命令行中輸入命令: bpu www.baidu.com (這種方法只會中斷www.baidu.com)
如何消除命令呢? 在命令行中輸入命令 bpu
終止斷點:
1. 在inspector界面點擊“run complete“即會終止本次HTTP請求的斷點。
2. 輸入go命令,也會使得當前的請求跳過斷點。
3. 在rules->auto breakpoint中disabled斷點即可。
看個實例,模擬博客園的登錄, 在IE中打開博客園的登錄頁面,輸入錯誤的用戶名和密碼,用Fiddler中斷會話,修改成正確的用戶名密碼。這樣就能成功登錄:
1. 用IE 打開博客園的登錄界面 http://passport.cnblogs.com/login.aspx
2. 打開Fiddler, 在命令行中輸入bpu http://passport.cnblogs.com/login.aspx
3. 輸入錯誤的用戶名和密碼,點擊登錄
4. Fiddler 能中斷這次會話,選擇被中斷的會話,點擊Inspectors tab下的WebForms tab 修改用戶名密碼,然後點擊Run to Completion 如下圖所示。
八、Fiddler中設置斷點修改Response
當然Fiddler中也能修改Response:
第一種:打開Fiddler 點擊Rules-> Automatic Breakpoint ->After Response (這種方法會中斷所有的會話)
如何消除命令呢? 點擊Rules-> Automatic Breakpoint ->Disabled
第二種: 在命令行中輸入命令: bpuafter www.baidu.com (這種方法只會中斷www.baidu.com)
如何消除命令呢? 在命令行中輸入命令 bpuafter,
九、Fiddler中如何過濾會話
每次使用Fiddler, 打開一個網站,都能在Fiddler中看到幾十個會話,看得眼花繚亂。最好的辦法是過濾掉一些會話,比如過濾掉圖片的會話。Fiddler中有過濾的功能, 在右邊的Filters tab中,裏面有很多選項, 稍微研究下,就知道怎麼用。
十、Fiddler中會話比較功能
選中2個會話,右鍵然後點擊Compare,就可以用WinDiff來比較兩個會話的不同了(當然需要你安裝WinDiff)
十一、Fiddler中提供的編碼小工具
點擊Fiddler 工具欄上的TextWizard, 這個工具可以Encode和Decode string.
參考教程:
http://kb.cnblogs.com/page/130367/
http://www.cnblogs.com/kingwolf_JavaScript/archive/2012/11/09/Fiddler_AutoResponder.html
http://www.cnblogs.com/TankXiao/archive/2012/12/25/2829709.html