轉自:http協議調試利器fiddler使用教程http://bbs.phpchina.com/thread-207418-1-1.html
Fiddler真乃神器!它和市面上常見的很多web調試器、http調試器、sniffer都不同!它的原理是在瀏覽器(或者其他使用http協議的進程)和服務器之間做代理角色,這樣所有的通信都要經過它,盡管sniffer和這個原理是一樣的,但他們工作的網絡層不同。
看上圖,你就明白原理了咯,它以8888端口(多么吉利的數字呀!)開本地代理服務器,並且支持https!所以,只要你的http通訊將代理設置為本地8888,fiddler都能幫助你截獲數據(最新2.2.0.3以上版本不用你設置,它會自動幫你設置。舊版本可以到ie→工具→internet選型→連接里設置。其他瀏覽器類似);另外,說他是神器,除了他具有一般web調試器的所有功能之外,其最最大的一個特點是可以中途修改http通信內容。看下圖:
嗯,就是這樣,提交內容和服務端響應內容都可以被fiddler中斷,修改內容后再次繼續,在ajax通信的時候,我們可以利用這個功能來調試數據,測試bug!方便至極。
其實,一旦運行fiddler,就相當於跑了一個http服務器一樣,你可以在瀏覽器地址欄輸入http://localhost:8888就能看到它的信息了。
下載地址:http://www.fiddler2.com/Fiddler2/version.asp
現在來了解下它的功能。
1.http請求斷點調試
如上圖,是一個網頁的原始請求和響應。現在在規則→自動斷點里設置“響應后”,點擊提交按鈕,現在請求發出,經過代理發送到服務器,服務器返回響應數據道代理,此時由於設置了斷點,響應被掛起,我們就能在fiddle中修改響應數據,然后提交,此時響應由代理發送到客戶端,就能看到響應數據了。如下圖所示:
我們還可以在請求發送前設置斷點,修改請求頭,fiddler代理將會把修改后的請求發送到服務器,然后讀取服務器響應,中轉並返回響應數據。
這對於調ajax程序特別有用。你可以中斷httpxml請求並修改請求內容。
2.自定義響應AutoResponder
利用fiddler還可以自定義替換響應。這是原始的請求。
設置如下過濾規則:
刷新網頁,響應頁資源已被修改。
我們還可以使用正則,指定一套規則,把符合規則的把請求替換為我們從網上抓取的數據包。
首先,我們可以把我們從網絡中抓取的一張圖片保存為dat數據文件
對應的圖片資源如下:
導出為dat文件
我們將其導出為59_Response.dat,
設置如下過濾規則:
請求規則:regex:(?insx)^http://.*gravatar.*$ #Match HTTPS-delivered GIFs
替換的響應數據:C:\Users\Admin\Desktop\temp\1\59_Response.dat
刷新網頁,效果如下,所有滿足規則的響應都被替換:
59_Response.dat文件的內容由http頭和實體數據兩部分組成。
*下面是詳細的過濾規則:
String Literals
Fiddler will match string literals (大小寫不敏感)
| Rule |
Matches |
| * |
http://www.example.com/Path1/query=example |
| EXAMPLE |
http://www.example.com/Path1/query=example |
| path1/ |
http://www.example.com/Path1/query=example |
| query |
http://www.example.com/Path1/q=Query |
Exact Match(精確匹配)
Fiddler supports an exact, 大小寫敏感 match syntax for expressions which begin with exact:
| Rule |
Matches |
| http://www.example.com/path |
|
| http://www.example.com/Path (No Match - mismatched case) |
|
| http://www.example.com/path/q=Query (No Match - substring different) |
Regular Expressions(正則表達式)
Fiddler supports regular expression syntax for expressions which begin with regex:
| Rule |
Matches |
| regex:.* |
http://www.example.com/Path1/query=example |
| regex:.*\.jpg |
http://www.example.com/Path1/query=foo.jpg&bar |
| regex:.*\.jpg$ |
http://www.example.com/Path1/query=foo.jpg&bar (No Match - improper ending) |
| regex:.*\.(jpg|gif|bmp)$ |
http://www.example.com/Path1/query=foo.bmp&bar (No Match - improper ending) |
| regex:(?insx).*\.(jpg|gif|bmp)$ |
http://www.example.com/Path1/query=foo.bmp&bar (No Match - improper ending) |
都是簡單的正則表達式,具體含義就不解釋了。
3.頁面請求統計
在左側選中要統計的請求,點擊右側統計欄就能看到統計情況了,點擊下端的show chart,還能以扇形圖的方式直觀地展示出來各種請求類型的大小。同時還能查看緩存以及一些請求的狀態碼,如發現404,那么請求的文件就是不存在了,應該檢查路徑了。一般這類狀態都會以醒目的圖標標出。
你還可以禁止緩存,這在瀏覽器調試時會很有用。你還可以自定義UA頭,如我用網站訪問糗事百科,則顯示的是普通網頁,而自定義UA為IPAD后,訪問后返回的將是相當於手機訪問產生的頁面。(這一點,opera瀏覽器做的就很到位,可以用opera輕易地來訪問wap網頁)
效果如下:
你還可以在配置文件里添加新的規則,如iphone,諾基亞老爺機等。
這里有各類session前面請求圖標所代表的含義。
| Request is being sent to the server |
|
| Downloading response from server |
|
| Request is paused at a breakpoint. |
|
| Responseis paused at a breakpoint. |
|
| Request used HTTP HEAD method; response should have no body |
|
| Request used HTTP CONNECT method; this establishes a tunnel used for HTTPS traffic |
|
| Response was HTML |
|
| Response was an image |
|
| Response was a script |
|
| Response was Cascading Style Sheet |
|
| Response was XML |
|
| Generic Response successful |
|
| Response was HTTP/300,301,302,303 or 307 redirect |
|
| Response was HTTP/304: Use cached version |
|
| Response was a request for client credentials |
|
| Response was a server error |
|
| Session was aborted by the client, Fiddler, or the Server. |
4.使用技巧與答疑
你可以在左側的命令框輸入命令,執行某些操作。
?Text 高亮url中含有此字符串的請求
>size Select sessions where response size is greater than sizebytes.
<size Select sessions where response size is less than sizebytes.
=status 狀態碼
=method 請求方式
@host 包含此主機的請求
bold 標記含有某字符串的請求,如bold /a.jsp
bpafter Break any response where the RequestURI contains the specified string.
bps Break any response where the status code matches.類似的還有bpv(method)
cls or clear :clear the session list.
Select:Select any session where the response Content-Type header contains the specified string.如select image
更多命令可以參照官方文檔,這些命令也是可以自定義的。
你還可以把session直接拖到request build里構造請求,也可以完全手工構造。
這樣,就可以執行我們自行構造的請求了。更多細節可以參考HTTP RFC文檔。
另外,fiddler的可擴展性很強,能夠用jscript來擴展它,實現自定義功能。
如果你的fiddler突然不抓包了,可能是你瀏覽器代理的問題(fiddler沒能成功幫你自動配置或者配置后又被你修改了)那看看tools-fiddler options-connections,看一下fidder listens on port的值是不是80,如果不是80而是8888的話,改回來。或者手動配置下代理。
5.相關資源:
http://www.fiddler2.com/fiddler/help/
http://blogs.msdn.com/b/fiddler/
http://blog.csdn.net/powerwolf/archive/2009/06/03/4237735.aspx
