Fiddler (一) 教程(Web调试工具)
?
From:http://kb.cnblogs.com/page/130367/
?
?
Fiddler的基本介紹
?
Fiddler 官方網(wǎng)站:http://www.fiddler2.com
Fiddler 官方幫助:http://docs.telerik.com/fiddler/knowledgebase/quickexec
Fiddler 官方網(wǎng)站提供了大量的幫助文檔和視頻教程, 這是學(xué)習(xí)Fiddler的最好資料。
Fiddler 是最強(qiáng)大最好用的 Web 調(diào)試工具之一,它能記錄所有客戶端和服務(wù)器的 http 和 https 請(qǐng)求,允許你監(jiān)視,設(shè)置斷點(diǎn),甚至修改輸入輸出數(shù)據(jù),Fiddler 包含了一個(gè)強(qiáng)大的基于事件腳本的子系統(tǒng),并且能使用 .net 語(yǔ)言 進(jìn)行擴(kuò)展。你對(duì)HTTP 協(xié)議越了解, 你就能越掌握 Fiddler 的使用方法。你越使用 Fiddler,就越能幫助你了解 HTTP 協(xié)議。
Fiddler 無(wú)論對(duì)開發(fā)人員或者測(cè)試人員來(lái)說(shuō),都是非常有用的工具。
?
?
Fiddler的工作原理
?
Fiddler 是以代理 web 服務(wù)器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。當(dāng) Fiddler 退出的時(shí)候它會(huì)自動(dòng)注銷,這樣就不會(huì)影響別的程序。不過(guò)如果 Fiddler 非正常退出,這時(shí)候因?yàn)?Fiddler 沒(méi)有自動(dòng)注銷,會(huì)造成網(wǎng)頁(yè)無(wú)法訪問(wèn)。解決的辦法是重新啟動(dòng)下 Fiddler。
?
?
同類的其它工具
?
同類的工具有:?httpwatch、firebug、wireshark
?
?
Fiddler 如何捕獲Firefox的會(huì)話
?
能支持HTTP代理的任意程序的數(shù)據(jù)包都能被Fiddler嗅探到,Fiddler的運(yùn)行機(jī)制其實(shí)就是本機(jī)上監(jiān)聽(tīng)8888端口的HTTP代理。 Fiddler2啟動(dòng)的時(shí)候默認(rèn)IE的代理設(shè)為了127.0.0.1:8888,而其他瀏覽器是需要手動(dòng)設(shè)置的,所以將Firefox的代理改為 127.0.0.1:8888就可以監(jiān)聽(tīng)數(shù)據(jù)了。
Firefox 上通過(guò)如下步驟設(shè)置代理
點(diǎn)擊: Tools -> Options,? 在Options 對(duì)話框上點(diǎn)擊Advanced tab - > network tab -> setting.
?
?
Fiddler如何捕獲HTTPS會(huì)話
?
默認(rèn)下,Fiddler不會(huì)捕獲HTTPS會(huì)話,需要你設(shè)置下, 打開Fiddler? Tool->Fiddler Options->HTTPS tab
選中checkbox, 彈出如下的對(duì)話框,點(diǎn)擊"YES"
點(diǎn)擊"Yes" 后,就設(shè)置好了。
?
?
Fiddler的基本界面
?
看看Fiddler的基本界面
?
?
Fiddler的HTTP統(tǒng)計(jì)視圖
?
通過(guò)陳列出所有的HTTP通信量,Fiddler可以很容易的向您展示哪些文件生成了您當(dāng)前請(qǐng)求的頁(yè)面。使用Statistics頁(yè)簽,用戶可以通過(guò)選擇多個(gè)會(huì)話來(lái)得來(lái)這幾個(gè)會(huì)話的總的信息統(tǒng)計(jì),比如多個(gè)請(qǐng)求和傳輸?shù)淖止?jié)數(shù)。
選擇第一個(gè)請(qǐng)求和最后一個(gè)請(qǐng)求,可獲得整個(gè)頁(yè)面加載所消耗的總體時(shí)間。從條形圖表中還可以分別出哪些請(qǐng)求耗時(shí)最多,從而對(duì)頁(yè)面的訪問(wèn)進(jìn)行訪問(wèn)速度優(yōu)化
?
?
QuickExec命令行的使用
?
Fiddler的左下角有一個(gè)命令行工具叫做QuickExec,允許你直接輸入命令。
常見(jiàn)得命令有:
? ? help? ? : 打開官方的使用頁(yè)面介紹,所有的命令都會(huì)列出來(lái)
? ? cls? ? ? :清屏??(Ctrl+x 也可以清屏)
? ? select :? 選擇會(huì)話的命令
? ? ?.png? :用來(lái)選擇png后綴的圖片
? ? bpu? ? ?:截獲 request
?
?
Fiddler 中設(shè)置斷點(diǎn)修改 Request
?
Fiddler最強(qiáng)大的功能莫過(guò)于設(shè)置斷點(diǎn)了,設(shè)置好斷點(diǎn)后,你可以修改httpRequest的任何信息包括host, cookie或者表單中的數(shù)據(jù)。設(shè)置斷點(diǎn)有兩種方法:
? ? 第一種:打開Fiddler 點(diǎn)擊Rules-> Automatic Breakpoint??->Before Requests(這種方法會(huì)中斷所有的會(huì)話)。
? ? ? ? ? ? ? ? 如何消除命令呢???點(diǎn)擊Rules-> Automatic Breakpoint??->Disabled
? ? 第二種:?在命令行中輸入命令:??bpu www.baidu.com???(這種方法只會(huì)中斷www.baidu.com).
? ? ? ? ? ? ? ? 如何消除命令呢???在命令行中輸入命令 bpu
看個(gè)實(shí)例,模擬博客園的登錄, 在IE中打開博客園的登錄頁(yè)面,輸入錯(cuò)誤的用戶名和密碼,用Fiddler中斷會(huì)話,修改成正確的用戶名密碼。這樣就能成功登錄:
- 1. 用IE 打開博客園的登錄界面? http://passport.cnblogs.com/login.aspx
- 2. 打開Fiddler,? 在命令行中輸入bpu http://passport.cnblogs.com/login.aspx
- 3. 輸入錯(cuò)誤的用戶名和密碼,點(diǎn)擊登錄
- 4. Fiddler 能中斷這次會(huì)話,選擇被中斷的會(huì)話,點(diǎn)擊Inspectors tab下的WebForms tab 修改用戶名密碼,然后點(diǎn)擊Run to Completion 如下圖所示。
- 5. 結(jié)果是正確地登錄了博客園
?
?
Fiddler 中設(shè)置斷點(diǎn)修改 Response
?
當(dāng)然 Fiddler中也能修改 Response:
第一種:打開Fiddler 點(diǎn)擊Rules-> Automatic Breakpoint??->After Response??(這種方法會(huì)中斷所有的會(huì)話)
? ? ? ? 如何消除命令呢???點(diǎn)擊Rules-> Automatic Breakpoint??->Disabled
第二種:??在命令行中輸入命令:??bpuafter www.baidu.com???(這種方法只會(huì)中斷www.baidu.com)
? ? ? ? 如何消除命令呢???在命令行中輸入命令 bpuafter,
具體用法和上節(jié)差不多,就不多說(shuō)了。
?
?
Fiddler 中創(chuàng)建 AutoResponder 規(guī)則
?
Fiddler 的AutoResponder tab允許你從本地返回文件,而不用將http request 發(fā)送到服務(wù)器上。
看個(gè)實(shí)例:
- 1. 打開博客園首頁(yè),把博客園的logo圖片保存到本地,并且對(duì)圖片做些修改。
- 2. 打開Fiddler 找到logo圖片的會(huì)話, http://static.cnblogs.com/images/logo_2012_lantern_festival.gif,? 把這個(gè)會(huì)話拖到AutoResponer Tab下
- 3. 選擇Enable automatic reaponses 和Unmatched requests passthrough
- 4. 在下面的Rule Editor 下面選擇 Find a file... 選擇本地保存的圖片.? 最后點(diǎn)擊Save 保存下。
- 5. ? 再用IE博客園首頁(yè), 你會(huì)看到首頁(yè)的圖片用的是本地的。
?
?
Fiddler 中如何過(guò)濾會(huì)話
每次使用Fiddler, 打開一個(gè)網(wǎng)站,都能在Fiddler中看到幾十個(gè)會(huì)話,看得眼花繚亂。最好的辦法是過(guò)濾掉一些會(huì)話,比如過(guò)濾掉圖片的會(huì)話。Fiddler中有過(guò)濾的功能, 在右邊的Filters tab中,里面有很多選項(xiàng), 稍微研究下,就知道怎么用。
?
Fiddler 中會(huì)話比較功能
選中2個(gè)會(huì)話,右鍵然后點(diǎn)擊Compare,就可以用WinDiff來(lái)比較兩個(gè)會(huì)話的不同了(當(dāng)然需要你安裝WinDiff)
?
Fiddler 中提供的編碼小工具
點(diǎn)擊 Fiddler 工具欄上的 TextWizard,這個(gè)工具可以 Encode 和 Decode string.
?
Fiddler 中查詢會(huì)話
用快捷鍵 Ctrl+F 打開 Find Sessions 的對(duì)話框,輸入關(guān)鍵字查詢你要的會(huì)話。 查詢到的會(huì)話會(huì)用黃色顯示。
?
Fiddler 中保存會(huì)話
有些時(shí)候我們需要把會(huì)話保存下來(lái),以便發(fā)給別人或者以后去分析。? 保存會(huì)話的步驟如下:
選擇你想保存的會(huì)話,然后點(diǎn)擊File->Save->Selected Sessions
?
Fiddler 的 script 系統(tǒng)
Fiddler最復(fù)雜的莫過(guò)于script系統(tǒng)了,官方的幫助文檔:?http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp。
首先先安裝SyntaxView插件,Inspectors tab->Get SyntaxView tab->Download and Install SyntaxView Now... 如下圖
安裝成功后Fiddler 就會(huì)多了一個(gè)Fiddler Script tab,如下圖:
在里面我們就可以編寫腳本了, 看個(gè)實(shí)例讓所有 cnblogs 的會(huì)話都顯示紅色。
把這段腳本放在 OnBeforeRequest(oSession: Session) 方法下,并且點(diǎn)擊 "Save script"
if (oSession.HostnameIs("www.cnblogs.com")) {oSession["ui-color"] = "red";
}
這樣所有的cnblogs的會(huì)話都會(huì)顯示紅色。
?
?
如何在 VS 調(diào)試網(wǎng)站的時(shí)候使用 Fiddler
?
我們?cè)谟?visual stuido 開發(fā) ASP.NET 網(wǎng)站的時(shí)候也需要用 Fiddler來(lái) 分析 HTTP, 默認(rèn)的時(shí)候 Fiddler 是不能嗅探到localhost 的網(wǎng)站。不過(guò)只要在 localhost后面加個(gè)點(diǎn)號(hào),Fiddler 就能嗅探到。?
例如:原本ASP.NET的地址是 http://localhost:2391/Default.aspx,? 加個(gè)點(diǎn)號(hào)后,變成 http://localhost.:2391/Default.aspx 就可以了
?
?
HTTP Request header
?
使用 Fiddler 能很方便的查看 Reques header, 點(diǎn)擊 Inspectors tab -> Request tab -> headers? 如下圖所示.
header 有很多,比較難以記憶,我們也按照Fiddler那樣把header 進(jìn)行分類,這樣比較清晰也容易記憶。
?
Cache 頭域
If-Modified-Since
作用: 把瀏覽器端緩存頁(yè)面的最后修改時(shí)間發(fā)送到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比。如果時(shí)間一致,那么返回304,客戶端 就直接使用本地緩存文件。如果時(shí)間不一致,就會(huì)返回200和新的文件內(nèi)容。客戶端接到之后,會(huì)丟棄舊文件,把新文件緩存起來(lái),并顯示在瀏覽器中。
例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT
實(shí)例如下圖
If-None-Match
作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 當(dāng)用戶再次請(qǐng)求該資源時(shí),將在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服務(wù)器驗(yàn)證資源的ETag沒(méi)有改變(該資源沒(méi)有更新),將返回一個(gè)304 狀態(tài)告訴客戶端使用 本地緩存文件。否則將返回200狀態(tài)和新的資源和Etag.? 使用這樣的機(jī)制將提高網(wǎng)站的性能
例如: If-None-Match: "03f2b33c0bfcc1:0"
實(shí)例如下圖
Pragma
作用: 防止頁(yè)面被緩存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一樣
Pargma 只有一個(gè)用法, 例如: Pragma: no-cache
注意: 在HTTP/1.0版本中,只實(shí)現(xiàn)了Pragema:no-cache, 沒(méi)有實(shí)現(xiàn)Cache-Control
?
Cache-Control
? ? ? ? 作用: 這個(gè)是非常重要的規(guī)則。 這個(gè)用來(lái)指定Response-Request 遵循的緩存機(jī)制。各個(gè)指令含義如下
Cache-Control:Public???可以被任何緩存所緩存()
Cache-Control:Private?????內(nèi)容只緩存到私有緩存中
Cache-Control:no-cache??所有內(nèi)容都不會(huì)被緩存
還有其他的一些用法, 我沒(méi)搞懂其中的意思, 請(qǐng)大家參考其他的資料
?
Client 頭域
Accept
作用:?瀏覽器端可以接受的媒體類型,
例如:??Accept: text/html ?代表瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html ?也就是我們常說(shuō)的html文檔,
如果服務(wù)器無(wú)法返回text/html類型的數(shù)據(jù),服務(wù)器應(yīng)該返回一個(gè)406錯(cuò)誤(non acceptable)
通配符 * 代表任意類型
例如 ?Accept: */* ?代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè))
?
Accept-Encoding:
作用: 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate),(注意:這不是只字符編碼);
例如: Accept-Encoding: gzip, deflate
Accept-Language
作用: 瀏覽器申明自己接收的語(yǔ)言。?
語(yǔ)言跟字符集的區(qū)別:中文是語(yǔ)言,中文有多種字符集,比如big5,gb2312,gbk等等;
例如: Accept-Language: en-us
?
User-Agent
作用:告訴HTTP服務(wù)器, 客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本.
我們上網(wǎng)登陸論壇的時(shí)候,往往會(huì)看到一些歡迎信息,其中列出了你的操作系統(tǒng)的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很 神奇,實(shí)際上,服務(wù)器應(yīng)用程序就是從User-Agent這個(gè)請(qǐng)求報(bào)頭域中獲取到這些信息User-Agent請(qǐng)求報(bào)頭域允許客戶端將它的操作系統(tǒng)、瀏覽 器和其它屬性告訴服務(wù)器。
例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
?
Accept-Charset
作用:瀏覽器申明自己接收的字符集,這就是本文前面介紹的各種字符集和字符編碼,如gb2312,utf-8(通常我們說(shuō)Charset包括了相應(yīng)的字符編碼方案);
例如:
Cookie/Login 頭域
Cookie:
作用: 最重要的header, 將cookie的值發(fā)送給HTTP 服務(wù)器
Entity頭域
Content-Length
作用:發(fā)送給HTTP服務(wù)器數(shù)據(jù)的長(zhǎng)度。
例如: Content-Length: 38
?
Content-Type
作用:
例如:Content-Type: application/x-www-form-urlencoded
Miscellaneous 頭域
Referer:
作用: 提供了Request的上下文信息的服務(wù)器,告訴服務(wù)器我是從哪個(gè)鏈接過(guò)來(lái)的,比如從我主頁(yè)上鏈接到一個(gè)朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁(yè)上的鏈接訪問(wèn)他的網(wǎng)站。
例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT
?
Transport 頭域
Connection
例如: Connection: keep-alive?? 當(dāng)一個(gè)網(wǎng)頁(yè)打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接
例如:? Connection: close? 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
?
Host(發(fā)送請(qǐng)求時(shí),該報(bào)頭域是必需的)
作用: 請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào),它通常從HTTP URL中提取出來(lái)的
例如: 我們?cè)跒g覽器中輸入:http://www.guet.edu.cn/index.html
瀏覽器發(fā)送的請(qǐng)求消息中,就會(huì)包含Host請(qǐng)求報(bào)頭域,如下:
Host:http://www.guet.edu.cn
此處使用缺省端口號(hào)80,若指定了端口號(hào),則變成:Host:指定端口號(hào)
?
?
HTTP Response header
?
同樣使用Fiddler 查看Response header, 點(diǎn)擊Inspectors tab ->Response tab-> headers? 如下圖所示
我們也按照Fiddler那樣把header 進(jìn)行分類,這樣比較清晰也容易記憶。
Cache頭域
Date
作用:? 生成消息的具體時(shí)間和日期
例如: Date: Sat, 11 Feb 2012 11:35:14 GMT?
Expires
作用: 瀏覽器會(huì)在指定過(guò)期時(shí)間內(nèi)使用本地緩存
例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT
Vary
作用:
例如: Vary: Accept-Encoding
Cookie/Login 頭域
P3P
作用: 用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問(wèn)cookie的問(wèn)題
例如: P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
Set-Cookie
作用: 非常重要的header, 用于把cookie 發(fā)送到客戶端瀏覽器, 每一個(gè)寫入cookie都會(huì)生成一個(gè)Set-Cookie.
例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
Entity頭域
ETag
作用:? 和If-None-Match 配合使用。 (實(shí)例請(qǐng)看上節(jié)中If-None-Match的實(shí)例)
例如: ETag: "03f2b33c0bfcc1:0"
Last-Modified:
作用: 用于指示資源的最后修改日期和時(shí)間。(實(shí)例請(qǐng)看上節(jié)的If-Modified-Since的實(shí)例)
例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT
Content-Type
作用:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類型和字符集,
例如:
Content-Type: text/html; charset=utf-8
Content-Type:text/html;charset=GB2312
Content-Type: image/jpeg
Content-Length
指明實(shí)體正文的長(zhǎng)度,以字節(jié)方式存儲(chǔ)的十進(jìn)制數(shù)字來(lái)表示。在數(shù)據(jù)下行的過(guò)程中,Content-Length的方式要預(yù)先在服務(wù)器中緩存所有數(shù)據(jù),然后所有數(shù)據(jù)再一股腦兒地發(fā)給客戶端。
例如: Content-Length: 19847
Content-Encoding
WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應(yīng)中的對(duì)象。
例如:Content-Encoding:gzip
Content-Language
作用: WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的語(yǔ)言者
例如: Content-Language:da
Miscellaneous 頭域
Server:
作用:指明HTTP服務(wù)器的軟件信息
例如:Server: Microsoft-IIS/7.5
X-AspNet-Version:
作用:如果網(wǎng)站是用ASP.NET開發(fā)的,這個(gè)header用來(lái)表示ASP.NET的版本
例如: X-AspNet-Version: 4.0.30319
X-Powered-By:
作用:表示網(wǎng)站是用什么技術(shù)開發(fā)的
例如: X-Powered-By: ASP.NET
Transport頭域
Connection
例如: Connection: keep-alive?? 當(dāng)一個(gè)網(wǎng)頁(yè)打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接
例如:? Connection: close? 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
Location頭域
Location
作用: 用于重定向一個(gè)新的位置, 包含新的URL地址
?
?
總結(jié)
以上是生活随笔為你收集整理的Fiddler (一) 教程(Web调试工具)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小甲鱼 OllyDbg 教程系列 (九)
- 下一篇: OD 快捷键使用大全。非常详细( 游戏逆