摘要: web開(kāi)發(fā)者的利器,fiddler抓包工具。
1.引言
在當(dāng)前web開(kāi)發(fā)工具滿天飛的年代,很難想象當(dāng)時(shí)在沒(méi)有這些工具的年代,我們是怎么挺過(guò)來(lái)的。既然時(shí)代已經(jīng)賦予我們?nèi)绱酥嗟木脊ぞ撸敲淳驮诠ぷ髦斜M情享用吧。
在需要截獲客戶端與服務(wù)器端之間的通訊數(shù)據(jù)時(shí),我們會(huì)使用httpwatch或firebug。
在跟蹤樣式或調(diào)試js代碼時(shí),我們會(huì)在瀏覽器下按下F12,來(lái)啟用開(kāi)發(fā)者工具;會(huì)在js代碼中加上debugger或借助開(kāi)發(fā)者工具的斷點(diǎn)(breakpoint)進(jìn)行逐步調(diào)試。
以上工具或方法都能很好的解決我們面臨的問(wèn)題,但如果服務(wù)器在遠(yuǎn)程而非本地,在我們不能登錄到服務(wù)器的情況下,我們?nèi)绾卧诖a中添加debugger,或者又如何修改一些代碼嘗試看看運(yùn)行效果呢?此時(shí)我們必須借助另一利器:Fiddler。
ps: Fiddler官方網(wǎng)站及下載地址 www.fiddlertool.com , 它是個(gè)免費(fèi)軟件。 同類的商業(yè)產(chǎn)品有HTTPWatch:http://www.httpwatch.com 。
2.Fiddler代理工作原理
Fiddler是微軟開(kāi)發(fā)的一個(gè)工具,可用來(lái)截獲本機(jī)與服務(wù)器之前的所有http通信,在這個(gè)過(guò)程中充當(dāng)一個(gè)代理的角色。
在我們啟動(dòng)Fiddler的時(shí)候,F(xiàn)iddler便已經(jīng)作為了一個(gè)代理服務(wù)器,如下圖所示:
作為系統(tǒng)代理,所有的來(lái)自互聯(lián)網(wǎng)服務(wù)(WinInet)的http請(qǐng)求在到達(dá)目標(biāo)Web服務(wù)器的之前都會(huì)經(jīng)過(guò)Fiddler;同樣的,所有的Http響應(yīng)都會(huì)在返回客戶端之前流經(jīng)Fiddler。如下圖所示:
3.Fiddler界面描述
4.Fiddler請(qǐng)求中斷
可 以進(jìn)入菜單“Rules/Automatic Breakpoints”來(lái)設(shè)置對(duì)請(qǐng)求進(jìn)行中斷,設(shè)計(jì)的時(shí)機(jī)可以是Before Requests、After Response。這樣我們就可以利用工具修改提交到服務(wù)器的數(shù)據(jù)信息(如:請(qǐng)求頭或請(qǐng)求體等),也可以修改從服務(wù)器端返回的數(shù)據(jù)。
- 以下為截獲提交到百度的數(shù)據(jù),我們可以對(duì)提交的信息進(jìn)行修改。
- 以下為截獲到百度返回的數(shù)據(jù),我們可以對(duì)返回的信息進(jìn)行修改。(注意:如果返回的數(shù)據(jù)進(jìn)行了壓縮,那么默認(rèn)將為亂碼,可以使用頂部菜單“Rules/Remove All Encodings”來(lái)解碼。)
5.Fiddler請(qǐng)求內(nèi)容替換
在“Fiddler請(qǐng)求中斷”章節(jié),我們已經(jīng)介紹了如何修改提交到服務(wù)器端的數(shù)據(jù)及修改服務(wù)器端返回的數(shù)據(jù),但如果覺(jué)得這樣仍不過(guò)癮,我們也可以完全用本地文件來(lái)代替需要從服務(wù)器下載的文件,這在我們?cè)\斷跟蹤一些js文件但卻不能修改js文件時(shí)非常有用。
比 如:在用瀏覽器測(cè)試P頁(yè)面時(shí),P頁(yè)面引入了一個(gè)js資源文件R.js,由于R.js文件在服務(wù)器S上,而我此時(shí)又不能登錄S服務(wù)器(沒(méi)有S服務(wù)器的帳 號(hào)),此時(shí)我們就可以通過(guò)瀏覽器將R.js文件下載到本地,然后對(duì)本地的R.js文件進(jìn)行調(diào)整,最后通過(guò)設(shè)置Fiddler,將R.js文件的請(qǐng)求使用本 地的R.js文件。截圖如下:
其中
EXACT表示完整匹配URL時(shí),才進(jìn)行映射處理
regext:(?insx)表示可以使用正則來(lái)匹配哪些URL需要進(jìn)行映射處理
其他一些參數(shù)不再一一說(shuō)明。