https://www.cnblogs.com/miantest/p/7289694.htmlhtml
Fiddler基礎知識前端
· Fiddler是強大的抓包工具,它的原理是以web代理服務器的形式進行工做的,使用的代理地址是:127.0.0.1,端口默認爲8888,咱們也能夠經過設置進行修改。ios
· 代理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去後,代理服務器會將數據包進行攔截,代理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代理服務器也會將數據攔截,再返回給客戶端。web
· Fiddler能夠抓取支持http代理的任意程序的數據包,若是要抓取https會話,要先安裝證書。正則表達式
HTTP協議chrome
· 要分析Fiddler抓取的數據包,咱們首先要熟悉HTTP協議。HTTP即超文本傳輸協議,是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。json
· HTTP的工做過程:當咱們請求一個超連接時,HTTP就開始工做了,客戶端先發送一個請求到服務器,請求內容包括:協議版本號、請求地址、請求方式、請求頭和請求參數;服務器收到請求後作相應的處理,並將響應數據返回到客戶端,響應內容包括:協議版本號、狀態碼和響應數據。前端根據響應數據作相應的處理,就是最終咱們看到的內容。這些過程是HTTP自動完成的,咱們只是輸入或點擊請求地址,而後查看前端給咱們展現的內容。更多關於HTTP協議的介紹請參考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html瀏覽器
· 請求方式經常使用的有:GET、PUT、POST、DELETE。緩存
· HTTP狀態碼主要分爲5類:以1開頭的表明請求已被接受,須要繼續處理;以2開頭的表明請求已成功被服務器接收、理解、並接受;以3開頭的表明須要客戶端採起進一步的操做才能完成請求;以4開頭的表明了客戶端看起來可能發生了錯誤,妨礙了服務器的處理;以5開頭的表明了服務器在處理請求的過程當中有錯誤或者異常狀態發生,也有多是服務器意識到以當前的軟硬件資源沒法完成對請求的處理。
· 常見的主要有:200:服務器成功處理了請求;404:未找到資源;500:內部服務器錯誤;503:服務器目前沒法爲請求提供服務;302:請求的URL已臨時轉移;304:客戶端的緩存資源是最新的,要客戶端使用緩存。
· 每一個狀態碼的詳細介紹請參考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
Fiddler的使用
· Fiddler是一個很好用的抓包工具,能夠將網絡傳輸發送與接收的數據包進行截獲、重發、編輯等操做。也能夠用來檢測流量。
· Fiddler安裝後,設置的端口默認爲8888,當Fiddler啓動後,默認將IE的代理設爲了127.0.0.1:8888,而其餘如火狐瀏覽器須要手動設置代理後才能夠抓包。設置內容如圖:
·
1)要使用Fiddler進行抓包,首先須要確保Capture Traffic是開啓的(安裝後是默認開啓的),勾選File->Capture Traffic,也能夠直接點擊Fiddler界面左下角的圖標開啓和關閉抓包。
2)因此基本上不須要作什麼配置,安裝後就能夠進行抓包了。那麼咱們怎麼分析抓到的這些數據包呢?如圖所示的區域爲數據包列表,要分析這些數據包,首先要了解各字段的含義。
#:順序號,按照抓包的順序從1遞增
Result:HTTP狀態碼
Protocol:請求使用的協議,如HTTP/HTTPS/FTP等
HOST:請求地址的主機名或域名
URL:請求資源的位置
Body:請求大小
Caching:請求的緩存過時時間或者緩存控制值
Content-Type:請求響應的類型
Process:發送此請求的進程ID
Comments:備註
Custom:自定義值
3)每一個Fiddler抓取到的數據包都會在該列表中展現,點擊具體的一條數據包能夠在右側菜單點擊Insepector查看詳細內容。主要分爲請求(即客戶端發出的數據)和響應(服務器返回的數據)兩部分。
4)HTTP Request Header:以百度爲例,查看請求百度主頁這條數據包的請求數據,從上面的Headers中能夠看到以下內容:
請求方式:GET
協議: HTTP/1.1
Client 頭域:
Accept: text/html, application/xhtml+xml, image/jxr, */* ---------瀏覽器端能夠接受的媒體類型
Accept-Encoding: gzip, deflate ---------壓縮方法
Accept-Language: zh-CN ---------語言類型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 ---------客戶端使用的操做系統和瀏覽器的名稱和版本
COOKIE頭域:將cookie值發送給服務器
Transport 頭域:
Connection:當網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP鏈接是否關閉。keep-alive表示不會關閉,客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經創建的鏈接;close表示關閉,客戶端再次訪問這個服務器上的網頁,須要從新創建鏈接。
HOST:主機名或域名,若沒有指定端口,表示使用默認端口80.
5)HTTP Response Header:繼續以百度爲例,如圖所示:
協議:HTTP/1.1
狀態碼:200
Cache頭域:
Cache-Control: private ---------此響應消息不能被共享緩存處理,對於其餘用戶的請求無效
Date: Sat, 05 Aug 2017 04:37:43 GMT ---------生成消息的具體時間和日期
Expires: Sat, 05 Aug 2017 04:37:42 GMT ---------瀏覽器會在指定過時時間內使用本地緩存
Cookie/Login 頭域:
Set-Cookie: BDSVRTM=264; path=/ ---------把cookie發送到客戶端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com
Entity頭域
Content-Length: 202740 ---------正文長度
Content-Type: text/html;charset=utf-8 ---------告知客戶端服務器自己響應的對象的類型和字符集
Miscellaneous 頭域:
Bdpagetype: 2
Bdqid: 0x99791efd00036253
Bduserid: 2577220064
Server: BWS/1.1 ---------指明HTTP服務器的軟件信息
X-Ua-Compatible: IE=Edge,chrome=1
Security頭域:
Strict-Transport-Security: max-age=172800 ---------基於安全考慮而須要發送的參數,關於這個參數的解釋,請參考:http://www.freebuf.com/articles/web/66827.html
Transport頭域:
Connection: Keep-Alive
6)TextView:顯示請求或響應的數據。
7)WebForms:請求部分以表單形式顯示全部的請求參數和參數值;響應部分與TextView內容是同樣的。
8)Auth:顯示認證信息,如Authorization
9)Cookies:顯示全部cookies
10)Raw:顯示Headers和Body數據
11)JSON:若請求或響應數據是json格式,以json形式顯示請求或響應內容
12)XML:若請求或響應數據是xml格式,以xml形式顯示請求或響應內容
13)上面是以百度主頁爲例,百度主頁採用的是GET請求,在TextView中沒有請求body,咱們再以無憂行網站登陸接口爲例,它是一個POST請求,除了請求頭外,在TextView中多了請求數據。這也是GET請求和POST請求的一個區別。GET請求是將請求參數放在url中,而POST請求通常是將請求參數放在請求body中。
總結:經過Fiddler能夠抓取請求和響應參數,經過對參數進行分析,能夠定位是前端仍是後臺問題。例如咱們在測試登陸接口時,輸入了正確的手機號和密碼,但前端提示「請輸入正確的用戶名和密碼」;僅僅經過界面提示咱們只能描述bug表象,但不能分析出問題緣由。假設經過抓包咱們發現是因爲前端參數名錯誤或參數值爲空,從而致使後臺報錯。這個時候咱們將bug指向前端開發人員,並將參數數據和接口文檔中對應的報文數據做爲附件上傳,是否是能夠提升bug的解決效率呢?Fiddler在實際的功能測試中有很大的做用,一方面幫助咱們更好的瞭解某個業務中客戶端和服務器端是經過哪些接口進行請求的,從而更好的瞭解代碼邏輯;另外一方面,咱們還能夠經過響應數據判斷哪裏出現了問題,例如可能服務器程序掛了,致使前端報「服務器故障」,這時咱們經過抓包發現響應數據返回502,這時咱們能夠手動去重啓服務或是聯繫運維重啓服務,從而提升問題的解決效率。
在上一篇中介紹了Fiddler的基本使用方法。經過上一篇的操做咱們能夠直接抓取瀏覽器的數據包。但在APP測試中,咱們須要抓取手機APP上的數據包,應該怎麼操做呢?
Andriod配置方法:
1)確保手機和Fiddler所在主機在同一個局域網中
2)獲取Fiddler所在主機的ip地址,經過cmd命令進入命令編輯器,輸入ipconfig -all,找到IPv4地址,記下該地址
3)對手機所鏈接的無線網絡進行設置,點擊WLAN,長按與Fiddler所在主機在同一個局域網的wifi,長按點擊【修改網絡】,選中【顯示高級選項】,代理設置爲手動,輸入代理服務器的主機名和端口後保存。代理服務器的主機名即2)中的IPv4地址,端口爲Fiddler上配置的端口(默認爲8888),能夠到Fiddler菜單欄中【Tool】-【Fiddler Option】的【Connections】中查看。
4)在手機瀏覽器上輸入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),點擊【FiddlerRoot certificate】下載安裝Fiddler證書。
5)若在瀏覽器上沒法打開該地址,須要作兩項檢查:1、確保在瀏覽器、wifi中配置的代理與Fiddler所在主機地址和Fiddler中配置的端口,三者保持一致;2、確保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已經勾選上,若沒有勾選,則須要勾選後保存並重啓Fiddler。
6)這時咱們打開手機上的瀏覽器或APP,能夠在Fiddler上看到手機上的數據包了。
IOS配置方法:
1)基本與andriod的配置方法一致,除了安裝證書方式與andriod略有不一樣,另外ios在下載證書後,須要手動信任證書。設置方法:打開【設置】-【通用】-【關於本機】-【證書信任證書】,找到對應的證書,啓用便可。
HTTPS抓包
上面都是針對HTTP協議進行抓包的設置,那麼HTTPS須要進行什麼配置呢?
1)打開Fiddler-【Tools】-【Fiddler Option】,切換到HTTPS選項卡,勾選【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而後點擊【Actions】-【Trust Root Certificate】,而後按照提示一路yes,直到彈框提示「Trust Cert success」點擊肯定後,重啓Fiddler就能夠抓取HTTPS協議的數據包了。
Fiddler過濾會話
咱們在使用Fiddler進行抓包時,發現只要是使用了Fiddler代理服務器的全部HTTP/HTTPS數據包都會在Fiddler數據列表中顯示出來,但有時咱們只關注從某個或某些服務器發出的請求,不想要看到其餘服務器的數據包,應該怎麼進行設置呢?咱們都知道Fiddler是一款強大的抓包工具,咱們能夠經過設置來過濾只篩選出咱們想要的數據包。
1)在右側菜單中,找到Fittlers選項,共有9個部分進行設置
2)Use Filters:勾選則表示使用過濾,不勾選則表示不進行過濾
3)Actions:有四個選項,Run Filterset now:當即運行過濾設置;Load Filterset:加載保存的過濾設置;Save Filterset:保存過濾設置;help:幫助
4)Hosts:該設置項有兩個選項
· 第一個下拉框是隻顯示內網或者外網選項
·
· 第二個下拉框是根據主機名信息顯示或者隱藏或者標記指定請求
·
5)Client Process:有三個選項,Show only traffic from:根據進程信息進行過濾,選擇後,將只顯示由該進程發出的請求;Show only Internet Explorer traffic:只關心由IE瀏覽器發出的請求;Hide traffic from Service Host:隱藏來自service host(即由svchost.exe進程發出)的請求
6)Request Headers:有五個選項,Show only if URL contains:能夠經過正則表達式過濾請求地址中包含或不包含的內容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隱藏全部js和css請求);Hide if URL contains:與Show only if URL contains相反,一個是顯示,一個是隱藏;Flags requests with headers:支持指定某個http請求頭名稱,若是在web session列表中存在該請求頭,會加粗顯示該session;Delete requests headers:與Flags requests with headers相似,這裏是若是包含該請求頭,則刪除該請求頭;Set request header:將HTTP請求頭更新爲所輸入的值。
7)Breakpoints:斷點設置,有四個選項。Break request on POST:對POST請求設置斷點;Break request on GET with query string:會爲全部方法爲GET且URL中包含了給定查詢條件的請求設置斷點;Break on XMLHttpRequest:對全部可以肯定是經過XMLHTTPRequest對象發送的請求設置斷點;Break response on Content-Type:會爲全部響應頭Content-Type中包含了指定文本的響應設置響應斷點。
8)Response Status Code:根據響應狀態碼設置斷點。
9)Response Type and Size:有幾種類型,一類是根據響應數據的類型顯示或隱藏;一類是根據響應數據的大小顯示或隱藏;一類是根據響應所須要的時間設置背景顏色;一類是根據文件類型進行限制。
· type有如下幾種類型:
·
· Time HeatMap複選框會基於服務器返回給定響應所須要的時間爲每一個session設置背景顏色。
10)Response Headers:與Request Headers不一樣的是,這塊區域是針對響應數據的頭部進行過濾。
這麼多設置項,比較經常使用的就是1.2.3部分。經過過濾設置,能夠快速的幫助咱們找到咱們須要抓包分析的數據包,從而提升效率,避免過多的數據包信息干擾咱們找到正確的數據包。
3、
咱們知道Fiddler是位於客戶端和服務器之間的代理,它可以記錄客戶端和服務器之間的全部 HTTP請求,能夠針對特定的HTTP請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至能夠修改服務器返回的數據,功能很是強大,是web調試的利器。前面咱們介紹瞭如何使用Fiddler進行抓包和分析,以及如何抓取APP上的數據包。這裏咱們介紹下如何修改請求和響應數據,也就是設置斷點。
對request設置斷點
1)經過菜單選項或快捷鍵F11進行設置,如圖
當咱們設置斷點後,進行HTTP請求,數據包順序列會有中斷的標記,單擊該數據包能夠看到在右側會增長一行操做欄。這個時候咱們在前端是沒有正常加載網頁的,點擊【Run to Completion】後能夠返回響應數據。
接下來爲了看咱們的斷點設置是否生效,咱們以登陸爲例子進行測試。登陸無憂行網站,輸入正確的用戶名和密碼,點擊登陸。咱們斷點規則設置爲before request,而後將密碼清空,看看服務器給咱們返回了什麼響應數據。
繼續以登陸爲例子,此次咱們將手機號改爲非移動帳號進行登陸。
因而可知,咱們的斷點已經設置成功,而且成功修改了HTTP的請求數據。
2)經過菜單選項或快捷鍵進行設置時,會將全部的HTTP請求都設置斷點,但有時咱們只想針對某個服務器發出的請求設置斷點,應該怎麼操做呢?Fiddler是支持命令操做的,咱們能夠經過「bpu 服務器地址」命令來對特定的請求設置斷點。
在下圖所示的位置輸入命令,而後回車運行。
這個時候從該服務器發出的全部請求都會被中斷,而從其餘服務器發出的請求能夠正常響應。
若是要清除原來的斷點,能夠在命令行輸入「bpu」,就會清除全部的斷點。
對response設置斷點
1)一樣的也能夠經過菜單選項或快捷鍵alt+F11進行設置
2)經過命令「bpafter 服務器地址」
咱們也用一個實例來驗證經過設置斷點修改響應數據。以百度主頁爲例,咱們攔截到響應數據中的title值爲」百度一下,你就知道「,咱們將響應數據中的title改爲」test百度一下,你就知道「,而後在前端看看最終展現的是什麼數據。
經過幾個實例,更好的幫助咱們理解斷點的含義,也鞏固了Fiddler做爲代理服務器的概念。接下來咱們再來講說,Fiddler另外一個很實用的功能:Fiddler的編碼和解碼。
Fiddler的編碼和解碼
1)響應body解碼
有時候咱們在Fiddler上看到響應數據是幾個亂碼字符,首先咱們能夠點擊,上方黃色提示區域直接進行解碼。以下面的兩個圖所示。
2)請求和響應數據解碼
有的時候,基於安全性考慮,開發人員會將請求和響應的body根據必定規則進行解碼。若是是普通的編碼規則,咱們能夠直接經過Fiddler操做進行解碼。例如在登陸百度網站的時候,有個參數的值是一個url地址,這個url通過urlEncode進行轉碼了。咱們就能夠將該參數經過urlDecode進行解碼。
首先,找到這個參數,選中後右鍵選擇【send to TextWizard】
而後,在【transform】中找到【URLDecode】,字段值就被成功解碼,咱們就能夠很清楚的看到裏面有哪些參數以及參數的值是什麼了。
上面都是解碼的例子,編碼在實際運用中不多,就不介紹了。另外裏面還有不少其餘的編碼/解碼方法,就不一一舉例啦~~
---恢復內容結束---
Fiddler基礎知識
· Fiddler是強大的抓包工具,它的原理是以web代理服務器的形式進行工做的,使用的代理地址是:127.0.0.1,端口默認爲8888,咱們也能夠經過設置進行修改。
· 代理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去後,代理服務器會將數據包進行攔截,代理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代理服務器也會將數據攔截,再返回給客戶端。
· Fiddler能夠抓取支持http代理的任意程序的數據包,若是要抓取https會話,要先安裝證書。
HTTP協議
· 要分析Fiddler抓取的數據包,咱們首先要熟悉HTTP協議。HTTP即超文本傳輸協議,是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。
· HTTP的工做過程:當咱們請求一個超連接時,HTTP就開始工做了,客戶端先發送一個請求到服務器,請求內容包括:協議版本號、請求地址、請求方式、請求頭和請求參數;服務器收到請求後作相應的處理,並將響應數據返回到客戶端,響應內容包括:協議版本號、狀態碼和響應數據。前端根據響應數據作相應的處理,就是最終咱們看到的內容。這些過程是HTTP自動完成的,咱們只是輸入或點擊請求地址,而後查看前端給咱們展現的內容。更多關於HTTP協議的介紹請參考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
· 請求方式經常使用的有:GET、PUT、POST、DELETE。
· HTTP狀態碼主要分爲5類:以1開頭的表明請求已被接受,須要繼續處理;以2開頭的表明請求已成功被服務器接收、理解、並接受;以3開頭的表明須要客戶端採起進一步的操做才能完成請求;以4開頭的表明了客戶端看起來可能發生了錯誤,妨礙了服務器的處理;以5開頭的表明了服務器在處理請求的過程當中有錯誤或者異常狀態發生,也有多是服務器意識到以當前的軟硬件資源沒法完成對請求的處理。
· 常見的主要有:200:服務器成功處理了請求;404:未找到資源;500:內部服務器錯誤;503:服務器目前沒法爲請求提供服務;302:請求的URL已臨時轉移;304:客戶端的緩存資源是最新的,要客戶端使用緩存。
· 每一個狀態碼的詳細介紹請參考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
Fiddler的使用
· Fiddler是一個很好用的抓包工具,能夠將網絡傳輸發送與接收的數據包進行截獲、重發、編輯等操做。也能夠用來檢測流量。
· Fiddler安裝後,設置的端口默認爲8888,當Fiddler啓動後,默認將IE的代理設爲了127.0.0.1:8888,而其餘如火狐瀏覽器須要手動設置代理後才能夠抓包。設置內容如圖:
·
1)要使用Fiddler進行抓包,首先須要確保Capture Traffic是開啓的(安裝後是默認開啓的),勾選File->Capture Traffic,也能夠直接點擊Fiddler界面左下角的圖標開啓和關閉抓包。
2)因此基本上不須要作什麼配置,安裝後就能夠進行抓包了。那麼咱們怎麼分析抓到的這些數據包呢?如圖所示的區域爲數據包列表,要分析這些數據包,首先要了解各字段的含義。
#:順序號,按照抓包的順序從1遞增
Result:HTTP狀態碼
Protocol:請求使用的協議,如HTTP/HTTPS/FTP等
HOST:請求地址的主機名或域名
URL:請求資源的位置
Body:請求大小
Caching:請求的緩存過時時間或者緩存控制值
Content-Type:請求響應的類型
Process:發送此請求的進程ID
Comments:備註
Custom:自定義值
3)每一個Fiddler抓取到的數據包都會在該列表中展現,點擊具體的一條數據包能夠在右側菜單點擊Insepector查看詳細內容。主要分爲請求(即客戶端發出的數據)和響應(服務器返回的數據)兩部分。
4)HTTP Request Header:以百度爲例,查看請求百度主頁這條數據包的請求數據,從上面的Headers中能夠看到以下內容:
請求方式:GET
協議: HTTP/1.1
Client 頭域:
Accept: text/html, application/xhtml+xml, image/jxr, */* ---------瀏覽器端能夠接受的媒體類型
Accept-Encoding: gzip, deflate ---------壓縮方法
Accept-Language: zh-CN ---------語言類型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 ---------客戶端使用的操做系統和瀏覽器的名稱和版本
COOKIE頭域:將cookie值發送給服務器
Transport 頭域:
Connection:當網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP鏈接是否關閉。keep-alive表示不會關閉,客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經創建的鏈接;close表示關閉,客戶端再次訪問這個服務器上的網頁,須要從新創建鏈接。
HOST:主機名或域名,若沒有指定端口,表示使用默認端口80.
5)HTTP Response Header:繼續以百度爲例,如圖所示:
協議:HTTP/1.1
狀態碼:200
Cache頭域:
Cache-Control: private ---------此響應消息不能被共享緩存處理,對於其餘用戶的請求無效
Date: Sat, 05 Aug 2017 04:37:43 GMT ---------生成消息的具體時間和日期
Expires: Sat, 05 Aug 2017 04:37:42 GMT ---------瀏覽器會在指定過時時間內使用本地緩存
Cookie/Login 頭域:
Set-Cookie: BDSVRTM=264; path=/ ---------把cookie發送到客戶端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com
Entity頭域
Content-Length: 202740 ---------正文長度
Content-Type: text/html;charset=utf-8 ---------告知客戶端服務器自己響應的對象的類型和字符集
Miscellaneous 頭域:
Bdpagetype: 2
Bdqid: 0x99791efd00036253
Bduserid: 2577220064
Server: BWS/1.1 ---------指明HTTP服務器的軟件信息
X-Ua-Compatible: IE=Edge,chrome=1
Security頭域:
Strict-Transport-Security: max-age=172800 ---------基於安全考慮而須要發送的參數,關於這個參數的解釋,請參考:http://www.freebuf.com/articles/web/66827.html
Transport頭域:
Connection: Keep-Alive
6)TextView:顯示請求或響應的數據。
7)WebForms:請求部分以表單形式顯示全部的請求參數和參數值;響應部分與TextView內容是同樣的。
8)Auth:顯示認證信息,如Authorization
9)Cookies:顯示全部cookies
10)Raw:顯示Headers和Body數據
11)JSON:若請求或響應數據是json格式,以json形式顯示請求或響應內容
12)XML:若請求或響應數據是xml格式,以xml形式顯示請求或響應內容
13)上面是以百度主頁爲例,百度主頁採用的是GET請求,在TextView中沒有請求body,咱們再以無憂行網站登陸接口爲例,它是一個POST請求,除了請求頭外,在TextView中多了請求數據。這也是GET請求和POST請求的一個區別。GET請求是將請求參數放在url中,而POST請求通常是將請求參數放在請求body中。
總結:經過Fiddler能夠抓取請求和響應參數,經過對參數進行分析,能夠定位是前端仍是後臺問題。例如咱們在測試登陸接口時,輸入了正確的手機號和密碼,但前端提示「請輸入正確的用戶名和密碼」;僅僅經過界面提示咱們只能描述bug表象,但不能分析出問題緣由。假設經過抓包咱們發現是因爲前端參數名錯誤或參數值爲空,從而致使後臺報錯。這個時候咱們將bug指向前端開發人員,並將參數數據和接口文檔中對應的報文數據做爲附件上傳,是否是能夠提升bug的解決效率呢?Fiddler在實際的功能測試中有很大的做用,一方面幫助咱們更好的瞭解某個業務中客戶端和服務器端是經過哪些接口進行請求的,從而更好的瞭解代碼邏輯;另外一方面,咱們還能夠經過響應數據判斷哪裏出現了問題,例如可能服務器程序掛了,致使前端報「服務器故障」,這時咱們經過抓包發現響應數據返回502,這時咱們能夠手動去重啓服務或是聯繫運維重啓服務,從而提升問題的解決效率。
在上一篇中介紹了Fiddler的基本使用方法。經過上一篇的操做咱們能夠直接抓取瀏覽器的數據包。但在APP測試中,咱們須要抓取手機APP上的數據包,應該怎麼操做呢?
Andriod配置方法:
1)確保手機和Fiddler所在主機在同一個局域網中
2)獲取Fiddler所在主機的ip地址,經過cmd命令進入命令編輯器,輸入ipconfig -all,找到IPv4地址,記下該地址
3)對手機所鏈接的無線網絡進行設置,點擊WLAN,長按與Fiddler所在主機在同一個局域網的wifi,長按點擊【修改網絡】,選中【顯示高級選項】,代理設置爲手動,輸入代理服務器的主機名和端口後保存。代理服務器的主機名即2)中的IPv4地址,端口爲Fiddler上配置的端口(默認爲8888),能夠到Fiddler菜單欄中【Tool】-【Fiddler Option】的【Connections】中查看。
4)在手機瀏覽器上輸入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),點擊【FiddlerRoot certificate】下載安裝Fiddler證書。
5)若在瀏覽器上沒法打開該地址,須要作兩項檢查:1、確保在瀏覽器、wifi中配置的代理與Fiddler所在主機地址和Fiddler中配置的端口,三者保持一致;2、確保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已經勾選上,若沒有勾選,則須要勾選後保存並重啓Fiddler。
6)這時咱們打開手機上的瀏覽器或APP,能夠在Fiddler上看到手機上的數據包了。
IOS配置方法:
1)基本與andriod的配置方法一致,除了安裝證書方式與andriod略有不一樣,另外ios在下載證書後,須要手動信任證書。設置方法:打開【設置】-【通用】-【關於本機】-【證書信任證書】,找到對應的證書,啓用便可。
HTTPS抓包
上面都是針對HTTP協議進行抓包的設置,那麼HTTPS須要進行什麼配置呢?
1)打開Fiddler-【Tools】-【Fiddler Option】,切換到HTTPS選項卡,勾選【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而後點擊【Actions】-【Trust Root Certificate】,而後按照提示一路yes,直到彈框提示「Trust Cert success」點擊肯定後,重啓Fiddler就能夠抓取HTTPS協議的數據包了。
Fiddler過濾會話
咱們在使用Fiddler進行抓包時,發現只要是使用了Fiddler代理服務器的全部HTTP/HTTPS數據包都會在Fiddler數據列表中顯示出來,但有時咱們只關注從某個或某些服務器發出的請求,不想要看到其餘服務器的數據包,應該怎麼進行設置呢?咱們都知道Fiddler是一款強大的抓包工具,咱們能夠經過設置來過濾只篩選出咱們想要的數據包。
1)在右側菜單中,找到Fittlers選項,共有9個部分進行設置
2)Use Filters:勾選則表示使用過濾,不勾選則表示不進行過濾
3)Actions:有四個選項,Run Filterset now:當即運行過濾設置;Load Filterset:加載保存的過濾設置;Save Filterset:保存過濾設置;help:幫助
4)Hosts:該設置項有兩個選項
· 第一個下拉框是隻顯示內網或者外網選項
·
· 第二個下拉框是根據主機名信息顯示或者隱藏或者標記指定請求
·
5)Client Process:有三個選項,Show only traffic from:根據進程信息進行過濾,選擇後,將只顯示由該進程發出的請求;Show only Internet Explorer traffic:只關心由IE瀏覽器發出的請求;Hide traffic from Service Host:隱藏來自service host(即由svchost.exe進程發出)的請求
6)Request Headers:有五個選項,Show only if URL contains:能夠經過正則表達式過濾請求地址中包含或不包含的內容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隱藏全部js和css請求);Hide if URL contains:與Show only if URL contains相反,一個是顯示,一個是隱藏;Flags requests with headers:支持指定某個http請求頭名稱,若是在web session列表中存在該請求頭,會加粗顯示該session;Delete requests headers:與Flags requests with headers相似,這裏是若是包含該請求頭,則刪除該請求頭;Set request header:將HTTP請求頭更新爲所輸入的值。
7)Breakpoints:斷點設置,有四個選項。Break request on POST:對POST請求設置斷點;Break request on GET with query string:會爲全部方法爲GET且URL中包含了給定查詢條件的請求設置斷點;Break on XMLHttpRequest:對全部可以肯定是經過XMLHTTPRequest對象發送的請求設置斷點;Break response on Content-Type:會爲全部響應頭Content-Type中包含了指定文本的響應設置響應斷點。
8)Response Status Code:根據響應狀態碼設置斷點。
9)Response Type and Size:有幾種類型,一類是根據響應數據的類型顯示或隱藏;一類是根據響應數據的大小顯示或隱藏;一類是根據響應所須要的時間設置背景顏色;一類是根據文件類型進行限制。
· type有如下幾種類型:
·
· Time HeatMap複選框會基於服務器返回給定響應所須要的時間爲每一個session設置背景顏色。
10)Response Headers:與Request Headers不一樣的是,這塊區域是針對響應數據的頭部進行過濾。
這麼多設置項,比較經常使用的就是1.2.3部分。經過過濾設置,能夠快速的幫助咱們找到咱們須要抓包分析的數據包,從而提升效率,避免過多的數據包信息干擾咱們找到正確的數據包。
3、
咱們知道Fiddler是位於客戶端和服務器之間的代理,它可以記錄客戶端和服務器之間的全部 HTTP請求,能夠針對特定的HTTP請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至能夠修改服務器返回的數據,功能很是強大,是web調試的利器。前面咱們介紹瞭如何使用Fiddler進行抓包和分析,以及如何抓取APP上的數據包。這裏咱們介紹下如何修改請求和響應數據,也就是設置斷點。
對request設置斷點
1)經過菜單選項或快捷鍵F11進行設置,如圖
當咱們設置斷點後,進行HTTP請求,數據包順序列會有中斷的標記,單擊該數據包能夠看到在右側會增長一行操做欄。這個時候咱們在前端是沒有正常加載網頁的,點擊【Run to Completion】後能夠返回響應數據。
接下來爲了看咱們的斷點設置是否生效,咱們以登陸爲例子進行測試。登陸無憂行網站,輸入正確的用戶名和密碼,點擊登陸。咱們斷點規則設置爲before request,而後將密碼清空,看看服務器給咱們返回了什麼響應數據。
繼續以登陸爲例子,此次咱們將手機號改爲非移動帳號進行登陸。
因而可知,咱們的斷點已經設置成功,而且成功修改了HTTP的請求數據。
2)經過菜單選項或快捷鍵進行設置時,會將全部的HTTP請求都設置斷點,但有時咱們只想針對某個服務器發出的請求設置斷點,應該怎麼操做呢?Fiddler是支持命令操做的,咱們能夠經過「bpu 服務器地址」命令來對特定的請求設置斷點。
在下圖所示的位置輸入命令,而後回車運行。
這個時候從該服務器發出的全部請求都會被中斷,而從其餘服務器發出的請求能夠正常響應。
若是要清除原來的斷點,能夠在命令行輸入「bpu」,就會清除全部的斷點。
對response設置斷點
1)一樣的也能夠經過菜單選項或快捷鍵alt+F11進行設置
2)經過命令「bpafter 服務器地址」
咱們也用一個實例來驗證經過設置斷點修改響應數據。以百度主頁爲例,咱們攔截到響應數據中的title值爲」百度一下,你就知道「,咱們將響應數據中的title改爲」test百度一下,你就知道「,而後在前端看看最終展現的是什麼數據。
經過幾個實例,更好的幫助咱們理解斷點的含義,也鞏固了Fiddler做爲代理服務器的概念。接下來咱們再來講說,Fiddler另外一個很實用的功能:Fiddler的編碼和解碼。
Fiddler的編碼和解碼
1)響應body解碼
有時候咱們在Fiddler上看到響應數據是幾個亂碼字符,首先咱們能夠點擊,上方黃色提示區域直接進行解碼。以下面的兩個圖所示。
2)請求和響應數據解碼
有的時候,基於安全性考慮,開發人員會將請求和響應的body根據必定規則進行解碼。若是是普通的編碼規則,咱們能夠直接經過Fiddler操做進行解碼。例如在登陸百度網站的時候,有個參數的值是一個url地址,這個url通過urlEncode進行轉碼了。咱們就能夠將該參數經過urlDecode進行解碼。
首先,找到這個參數,選中後右鍵選擇【send to TextWizard】
而後,在【transform】中找到【URLDecode】,字段值就被成功解碼,咱們就能夠很清楚的看到裏面有哪些參數以及參數的值是什麼了。
上面都是解碼的例子,編碼在實際運用中不多,就不介紹了。另外裏面還有不少其餘的編碼/解碼方法,就不一一舉例啦~~