轉自:http協議調試利器fiddler使用教程http://bbs.phpchina.com/thread-207418-1-1.htmlphp
Fiddler真乃神器!它和市面上常見的不少web調試器、http調試器、sniffer都不一樣!它的原理是在瀏覽器(或者其餘使用http協議的進程)和服務器之間作代理角色,這樣全部的通訊都要通過它,儘管sniffer和這個原理是同樣的,但他們工做的網絡層不一樣。html
看上圖,你就明白原理了咯,它以8888端口(多麼吉利的數字呀!)開本地代理服務器,而且支持https!因此,只要你的http通信將代理設置爲本地8888,fiddler都能幫助你截獲數據(最新2.2.0.3以上版本不用你設置,它會自動幫你設置。舊版本能夠到ie→工具→internet選型→鏈接裏設置。其餘瀏覽器相似);另外,說他是神器,除了他具備通常web調試器的全部功能以外,其最最大的一個特色是能夠中途修改http通訊內容。看下圖:web
嗯,就是這樣,提交內容和服務端響應內容均可以被fiddler中斷,修改內容後再次繼續,在ajax通訊的時候,咱們能夠利用這個功能來調試數據,測試bug!方便至極。ajax
其實,一旦運行fiddler,就至關於跑了一個http服務器同樣,你能夠在瀏覽器地址欄輸入http://localhost:8888就能看到它的信息了。正則表達式
下載地址:http://www.fiddler2.com/Fiddler2/version.aspexpress
如今來了解下它的功能。瀏覽器
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