本文最早發(fā)布于csdn
背景介紹:
Fiddler是一個http協(xié)議調(diào)試代理工具,它能夠記錄并檢查所有你的電腦和互聯(lián)網(wǎng)之間的http通訊,,設(shè)置斷點,,查看所有的“進出”Fiddler的數(shù)據(jù)(指cookie,html,js,css等文件,這些都可以讓你胡亂修改的意思),。 Fiddler 要比其他的網(wǎng)絡(luò)調(diào)試器要更加簡單,,因為它不僅僅暴露http通訊還提供了一個用戶友好的格式。Fiddler是用C#寫出來的,它包含一個簡單卻功能強大的基于JScript.NET事件腳本子系統(tǒng),,它的靈活性非常棒,,可以支持眾多的http調(diào)試任務(wù),并且能夠使用.net框架語言進行擴展,。
注:Fiddler因為設(shè)置代理的原因,,在使用中可能會出現(xiàn)網(wǎng)絡(luò)問題,直接關(guān)閉或者點擊關(guān)掉左下角的capture就好了
Fiddler及Willow插件的安裝
Fiddler有兩個版本,,下載地址 http://www./download/fiddler ,,針對Fiddler2和Fiddler4,對應(yīng)的Willow插件版本也是不一樣的,。本文使用和針對的主要是Fiddler4
官網(wǎng)介紹的主要功能如下:
Web調(diào)試,,調(diào)試PC、Mac或Linux系統(tǒng)和移動設(shè)備的通信,。確保適當(dāng)?shù)腸ookies,headers和緩存指令是客戶端和服務(wù)器之間傳輸,。支持任何框架,包括.NET,Java,Ruby等等。
性能測試,,F(xiàn)iddler讓你一眼就看到加載頁面權(quán)重-請求的數(shù)量和傳輸?shù)淖止?jié),,http緩存和壓縮技術(shù)。也可以用Fiddler的自定義規(guī)則來關(guān)注潛在的性能問題.比如,你可以標(biāo)記所有大于25KB的響應(yīng)(Fiddler4要安裝Fiddeler script)
HTTP/HTTPS流量監(jiān)控,F(xiàn)iddler是一個免費的web調(diào)試代理,,記錄了所有在你的電腦和互聯(lián)網(wǎng)之間的HTTP(s)的流量,,可以用它來調(diào)試幾乎任何支持代理的應(yīng)用程序比如IE,Chrome,,Safari等
Web會話操作,,容易操作和編輯web會話。你所需要做的就是設(shè)置一個暫停正在處理的會話和允許變更的請求/響應(yīng)的斷點,。你也可以在Fiddler中編寫自己的HTTP請求(也就是偽造請求)
安全性測試,,使用Fiddler對你的web應(yīng)用程序進行安全性測試——解密HTTPS流量,用man-in-the-middler解密技顯示和修改請求,??梢耘渲肍iddler解碼所有流量或者特定會話的流量
定制Fiddler,受益于豐富的擴展模型,從簡單的FiddlerScript到強大的擴展,可以使用任何.net語言來擴展,,點擊查看已有的擴展,。
Fiddler原理:
在本機開啟一個http的代理服務(wù)器,然后它會轉(zhuǎn)發(fā)所有的http請求和響應(yīng)到最終的服務(wù)器,如圖所示
打開Fiddler后,,F(xiàn)iddler會自動篡改代理,,打開ie的internet選項->連接->局域網(wǎng)設(shè)置->高級可以看到下圖
通過更改瀏覽器的代理服務(wù)地址,F(xiàn)iddler就可以截獲所有發(fā)出的請求
Fiddler兩種代理模式
流模式:(streaming) 實時傳送給客戶端(更接近于瀏覽器本身真實的行為) 緩沖模式: (buffering) 等http請求所有東西都準(zhǔn)備好后才返回給應(yīng)用程序(可控制最后的服務(wù)器響應(yīng)) 在Fiddler的工具欄的Stream可以進行兩種模式的切換,,默認(rèn)是緩沖模式
Fiddler使用場景
開發(fā)環(huán)境host配置,,Tools->Hosts
前后端接口調(diào)試
線上bugfix,將線上項目代理到本地進行修改調(diào)試(AutoResponder,Willow)
性能分析和優(yōu)化
工具欄常用功能介紹
Replay,,回放會話,,選中會話并按R鍵即可回放會話(可多條)
清空監(jiān)控面板,快捷鍵ctrl+x
go 斷點調(diào)試
stream切換代理模式
Decode 解壓請求
keep all session選項可選保存會話的數(shù)量,,默認(rèn)的保存所有,,保存的會話越多,fiddler占用的內(nèi)存越大,,可以設(shè)置下,,而且調(diào)試也不希望看到太多會話,可以根據(jù)需要清空監(jiān)控面板或過濾請求
All Process,,可以用來控制如只捕獲chrome瀏覽器的請求
Find 可以查找會話并選擇顏色高亮標(biāo)明
TextWizard 解碼/編碼功能,,可選選項很多,避免去網(wǎng)上找解碼工具
狀態(tài)欄
狀態(tài)欄功能較少,,但也很重要
Capture用來控制Fiddler是否工作,,點擊即可切換狀態(tài) All Process控制請求來源 旁邊的數(shù)字代表當(dāng)前會話數(shù)量
命令行
select命令。選擇所有相應(yīng)類型(指content-type)為指定類型的HTTP請求,,如選擇圖片,,使用命令select image.而select css則可以選擇所有相應(yīng)類型為css的請求,,select html則選擇所有響應(yīng)為HTML的請求,選中的部分會高亮顯示,,如圖執(zhí)行select image
-
allbut命令,。 allbut命令用于選擇給定類型的HTTP請求(刪除其他類型請求),該命令還有一個別名keeponly.
Eg:只保留image會話:allbut image
-
text命令 選擇所有 URL 匹配問號后的字符的全部 session
Eg:?qq.com
-
小于/大于size命令 選擇響應(yīng)大小大于某個大小或者小于某個大小的所有HTTP請求
Eg:選擇響應(yīng)大小小于10k的請求:<10k
-
=status命令 選擇響應(yīng)狀態(tài)等于給定狀態(tài)的所有HTTP請求,。
Eg:選擇所有狀態(tài)為200的HTTP請求:=200
-
@host命令 選擇包含指定 HOST 的全部 HTTP請求,。
Eg:選擇所有host包含csdn.net的請求:@csdn.net
-
Bpafter, Bps, bpv, bpm, bpu
這幾個命令主要用于批量設(shè)置斷點
Bpafter xxx: 中斷 URL 包含指定字符的全部 session 響應(yīng)
Bps xxx: 中斷 HTTP 響應(yīng)狀態(tài)為指定字符的全部 session 響應(yīng),。
Bpv xxx: 中斷指定請求方式的全部 session 響應(yīng)
Bpm xxx: 中斷指定請求方式的全部 session 響應(yīng),。等同于bpv xxx
Bpu xxx:與bpafter類似。
當(dāng)這些命令沒有加參數(shù)時,,會清空所有設(shè)置了斷點的HTTP請求,。
help 輸入help會彈出這個頁面 http://docs./fiddler/knowledgebase/quickexec,,是fiddler的官方命令行文檔
會話圖標(biāo)類型(此圖為Fiddler2)
右側(cè)窗口功能
-
Stastics:統(tǒng)計選中的一個或多個請求相關(guān)數(shù)據(jù),,大小、耗時
最下方會有一個不太容易發(fā)現(xiàn)的功能show charts,,點擊會對請求進行可視化處理,,如圖
Inspectors:多種方式查看Request或者Response的詳細(xì)消息,如圖:
Filters:設(shè)置會話過濾規(guī)則
Log:日志
Timeline:性能優(yōu)化和分析
-
Willow的使用:請求重定向(模擬響應(yīng))
右鍵添加項目,,規(guī)則,,host
注意:Match中的URL必須以"/"結(jié)尾,Action中的URL必須以"\"結(jié)尾
其他使用:
Fiddeler+Willow+全民wifi 配合真機調(diào)試
確保fiddler相關(guān)選項勾選如下,,tools->fiddler options ->connections
這里默認(rèn)的只會抓取HTTP請求包,,如果也要抓取HTTPS包,則在HTTPS標(biāo)簽欄里設(shè)置,,把Capture HTTPS CONNECTs選項 勾上,。
2.確保capture開啟,我的fiddler有時候會出現(xiàn)這種情況
此時capture會關(guān)閉,,需要點擊黃色區(qū)域才能重新開啟capture,,不然無法抓到請求
3.手機和電腦連接在同一個局域網(wǎng)中,全民wifi插入電腦USB口(我用過360隨身wifi等其他設(shè)備,,因為公司網(wǎng)絡(luò)設(shè)置的原因都不行),。如果是第一次使用全民wifi,會有提示下載驅(qū)動,,成功安裝驅(qū)動后會在電腦右下角提示安裝成功和開始體驗,。電腦右下角出現(xiàn)全民wifi圖標(biāo),可以通過手機掃描二維碼或者在手機端wifi設(shè)置里面直接輸入賬號密碼來連接共享pc網(wǎng)絡(luò),,接著配置代理,,一般fiddler默認(rèn)的端口是8888,,如有不同可以在connection中查看,配置主機名,,兩種方法:
方法一:windows下是win+r 運行cmd 接著運行ipconfig
![](http://7xteia.com1.z0.glb./4.png)
方法二:鼠標(biāo)移上fiddler右上角的online會出現(xiàn)提示如下:
![](http://7xteia.com1.z0.glb./5.png)
4.創(chuàng)建重定向規(guī)則,,如果文件較少,可以用fiddler自帶的AutoResponsder,如果是文件夾,,就用willow添加,,因為手q使用了離線包機制嗎,所以willow要配置host禁用離線包并在手機端清除qq緩存,,右鍵會出現(xiàn)添加項目規(guī)則host等的工具欄
配置host如圖
5.開始抓包,,打開項目對應(yīng)的區(qū)域,抓到的請求在fiddler里面會是橙色區(qū)域如圖
即代表抓包成功,,有時候會出現(xiàn)404或者代碼報錯,,所以一般要先在瀏覽器端測試觀察控制臺有沒有報錯 如果發(fā)現(xiàn)404,可能是因為使用了不同的域名,,也要進行添加規(guī)則和匹配
6.瀏覽器端的調(diào)試如下: 復(fù)制抓到的請求地址,,在瀏覽器端打開即可,如果要調(diào)試一個項目下另外的業(yè)務(wù),,更改url結(jié)構(gòu)即可
我遇到過因為需要看外網(wǎng)的情況關(guān)閉了手機的代理后再開結(jié)果無法抓包的問題,,重啟手機就好了,有時候請求很多有很多不想看的請求需要觀察當(dāng)前的業(yè)務(wù)時,,可以設(shè)置filter
過濾掉請求后點擊action選擇run filterset now即可生效
7.清空面板方法如下: 方法一:在命令窗口里輸入clear即可 方法二:上方有移除請求的選項 點擊會有很多選項,,可以移除所有請求,移除img請求和移除請求碼為非200的等等,,根據(jù)實際需要選擇不同選項 方法三:清除所有記錄的快捷鍵:ctrl+x
一般調(diào)試的時候都要禁用緩存 在fiddler2里是Tools->Performance->Disable Caching,在fiddler4里是Rules->Performance->Disable Caching
Fiddler的高級使用
網(wǎng)速限速
我們?yōu)槭裁匆匏?。限速對于web前端研發(fā)是非常重要的,由于開發(fā)者的機器一般配置都很高,,并且是在localhost下來調(diào)試程序,,所以很難模擬到用戶的真實使用情 況,如正在下載JS,css等靜態(tài)資源的時候,,頁面的一個渲染情況,。當(dāng)網(wǎng)速很慢的時候,我們更希望看到的是先渲染出用戶界面,,而不是讓用戶看到一片空白,。那么這個時候,網(wǎng)絡(luò)限速就能很方便在localhost針對類似的情況來做性能調(diào)試與優(yōu)化,。
方法一:Fiddler script(自定義延時) 需要的插件:Fiddler script,,下載地址:http://www./download/fiddler/fiddlerscript-editor 下載完直接安裝就行了,安裝之前必須關(guān)閉fiddler,,再打開fiddler就會在右側(cè)tab看到fiddler script選項 fiddler script原理:把請求完全代碼化 Eg:模擬延時3s發(fā)送請求: 選中會話,,在fiddler-script——>Go to->OnBeforeRequest添加代碼如下: oSession["request-trickle-delay"] = "3000"
點擊save script保存,,再replay會話就會發(fā)現(xiàn)會話延遲了三秒才發(fā)送 延時響應(yīng)同理
方法二: Rules → Performances → Simulate Modem Speeds
Fiddler替換HTTP Request Host 替換的方法有兩種,一種是暫時的,,一種是永久的,,暫時的方法是在Fiddler 左下角輸入:
urlreplace www.demo.com www.dev.demo.com
要清除轉(zhuǎn)發(fā),請在同一位置輸入:
urlreplace
按Enter 就可以了,。
更詳細(xì)的說明請參考Fiddler官方說明文件- QuickExec Reference ,。 可以發(fā)現(xiàn)urlreplace 做的是整個網(wǎng)址字串的取代,所以可以動手腳的地方不只于此,。
永久的方法是修改Fiddler的CustomRules.js ,,注意是.js ! 點下Fiddler 上方的Rules ,,再點Customize Rules :
如果有安裝FiddlerScript Editor ,,會用FiddlerScript Editor開啟CustomRules.js ,否則會用筆記本開啟,。 或者也可以到「我的文件 Fiddler2 Scripts 」直接編輯CustomRules.js ,。
//請先在CustomRules.js 找到:
static function OnBeforeRequest ( oSession : Session ) {
// ...
//在函式中加入:
if ( oSession . HostnameIs ( 'www.demo.com' ) )
oSession . hostname = 'www.dev.demo.com' ;
}
將CustomRules.js 存檔, Fiddler 會自動重新載入CustomRules.js ,,原先發(fā)到www.demo.com 的HTTP Request 就會自動轉(zhuǎn)發(fā)到www.dev.demo.com ,。 更詳細(xì)的說明請參考Fiddler官方說明文件- Script Samples ,。
Fiddler斷點調(diào)試
設(shè)置斷點有兩種方法 第一種:打開Fiddler 點擊Rules-> Automatic Breakpoint ->Before Requests(這種方法會中斷所有的會話) 如何消除命令呢,? 點擊Rules-> Automatic Breakpoint ->Disabled
第二種: 在命令行中輸入命令: bpu www.baidu.com (這種方法只會中斷www.baidu.com)
如何消除命令呢? 在命令行中輸入命令 bpu
看個實例,,模擬QQ郵箱的登錄,,輸入錯誤的用戶名和密碼,用Fiddler中斷會話,,修改成正確的用戶名密碼,。這樣就能成功登錄
登錄qq郵箱,輸入錯誤的密碼
打開Fiddler, 在命令行中輸入bpu
輸入錯誤的用戶名和密碼 點擊登錄
Fiddler 能中斷這次會話,,選擇被中斷的會話,,點擊Inspectors tab下的WebForms tab 修改用戶名密碼,然后點擊Run to Completion,。
結(jié)果是正確地登錄了qq郵箱
禁用緩存
兩種方法,,一種暫時的,一種永久的(通過fiddler script) 暫時的方法: Tools->Performance->Disable Caching
永久的方法:
在fiddler script里查找
> var m_DisableCaching: boolean = false;
把值改成true并保存就可以了
擴展Fiddler script的一些用法
實例 讓所有qq的會話都顯示紅色,。
把這段腳本放在OnBeforeRequest(oSession: Session) 方法下,,并且點擊"Save script"
if (oSession.HostnameIs("www.cnblogs.com")) {
oSession["ui-color"] = "red";
}
效果如圖
這樣所有的cnblogs的會話都會顯示紅色
如何在Fiddler Script中修改Cookie
cookie其實就是request 中的一個header.
// 刪除所有的cookie
oSession.oRequest.headers.Remove("Cookie");
// 新建cookie oSession.oRequest.headers.Add("Cookie", "username=testname;testpassword=P@ssword1");
注意: Fiddler script不能直接刪除或者編輯單獨的一個cookie, 你需要用replace方法或者正則表達式的方法去操作cookie的string
復(fù)制代碼
static function OnBeforeRequest(oSession: Session)
{
if (oSession.HostnameIs('www.example.com') &&
oSession.uriContains('pagewithCookie') &&
oSession.oRequest.headers.Contains("Cookie"))
{
var sCookie = oSession.oRequest["Cookie"];
// 用replace方法或者正則表達式的方法去操作cookie的string
sCookie = sCookie.Replace("cookieName=", "ignoreme=");
oSession.oRequest["Cookie"] = sCookie;
}
一點小的tips:
我在使用Fiddler的過程中碰到過無法抓包的情況,,原因是之前因為測試配置了autoresponder或者filter等沒有改回去,,如果碰到這個情況請確保Fiddler的選項都配置正確
-
chrome和firefox瀏覽器無法被監(jiān)聽 fiddler安裝之后,,默認(rèn)會在IE瀏覽器中安裝一個fiddler的插件,所以它對IE及國內(nèi)基于IE內(nèi)核的各類瀏覽器都能實現(xiàn)監(jiān)聽,,但其他內(nèi)核的瀏覽器無法被監(jiān)聽,。
解決辦法:禁用chrome和firefox中具有代理功能的插件,比如chrome如果安裝了switchSharp,,禁用它或選擇“使用系統(tǒng)代理設(shè)置”,,或在switchSharp中新配置一個代理項(比如名為fiddler,用于指向代理127.0.0.1,,端口8888,,如下圖),即可實現(xiàn)監(jiān)聽,。
|