Android中Fiddler的使用技巧

[TOC]css

對於前端開發,Fiddler應該是比較經常使用的網絡請求監聽工具了,以前爲了跨平臺還想使用wireshark,可是發現相比起來不太友好,折騰事後才發現原來Fiddler也有linux和mac版本(多虧了.net開源,須要安裝mono,後面會有連接,固然體驗會差點),本文就介紹幾個有用卻被用得比較少的技巧(本文基於Fiddler V4.6);html

Fiddler在客戶端和服務器之間假設了一個代理,咱們能夠經過它對請求和響應進行各類操做, 前端

原理

1. 下載安裝

win mac/linux linux中須要安裝mono:linux

sudo apt-get install mono-complete
mono Fiddler.exe 
複製代碼

另外,也能夠在mac中開啓虛擬機運行windows系統而後運行Fiddler,具體能夠參考 這篇文章 , 主要就是設置虛擬機網卡爲 '橋接模式' 並記錄下ip,而後在mac中設置網絡proxies爲虛擬機便可,若要抓取手機包,則將手機代理也設置爲虛擬機的ip便可;web

主界面

2. 插件安裝

Fiddler也能夠安裝插件,因爲安裝的時候碰到點坑,這裏也記錄一下: 到 這裏 下載插件,我下載了一個 Traffic Differ , 是個 exe 文件,雙擊安裝並重啓Fiddler( File-exit ,而後從新啓動)後,選擇了任意兩個請求, 右鍵-compare(ctrl+w) ,提示我找不到 WinDiff.exe ,使用 EveryThing 搜索後發現生成的 WinDiff.exeC:\Program Files (x86)\Microsoft WebMatrix 中,這個目錄再也不我係統 path 環境變量下,致使找不到,添加下便可; P.S. 插件運行後除了生成 WinDiff.exe外,還在 Fiddler2/Scripts 目錄下生成了 Differ.dll,能夠查看下,另外,插件是否安裝也能夠在 toolsTelerik Fildder OptionsExtensions 面板中查看;正則表達式

3. 開啓代理,實現請求中轉

1. 設置Fiddler端口,容許遠程鏈接

單擊菜單欄: toolsTelerik Fildder OptionsConnections,進行以下設置,其中端口號能夠自定義,不衝突便可,並容許遠程鏈接; json

options

2. 手機端設置Wifi代理

固然,Fiddler安裝的主機要跟手機在同一個無線網絡中,在手機中設置wifi代理參數,其中端口號就是Fiddler中設定的,而路由ip地址是Fiddler所在主機的網址: windows

手機wifi代理設置

至此咱們就成功使用Fiddler做爲手機的代理了;api

3. Filters過濾器設置

主要設定好後,要單擊 Actions - Run Filterset Now 來使過濾條件生效 bash

Filter

4. Composer模擬請求

能夠直接拖拽會話列表中的已有請求到本頁面,修改數據後,execute執行,可是咱們有另外一個利器 postman,就不須要這裏了吧;

5. 模擬弱網絡狀況

直接上圖

菜單開啓弱網絡模擬

代碼修改網速

6. 重定向資源/模擬數據

開發時候,一般客戶端和服務器是兩撥人馬在作,常常是接口文檔已出,但接口並未實現或者無數據或數據不完整,致使客戶端測試時候很痛苦,須要在程序中各類判斷各類假數據,使用Fiddler可使用本地資源替換服務端的response便可;

另外,Fiddler支持多種url匹配的方式(能夠從 url pattern 下拉列表中查看):

  • 字符匹配 如輸入 csdn,能夠匹配 http://www.csdn.net/ 或者 http://blog.csdn.net/
  • 精確匹配 以 EXACT 開頭表示徹底匹配,如上邊的例子 EXACT:http://blog.csdn.net
  • 正則表達式匹配 以 regex: 開頭,如 regex:(?insx).*.(css)$ 表示匹配全部以css結尾的請求url ;

以下圖,能夠指定某個請求url後,指定其要返回的數據,好比某個根據接口文檔信息生成的json文件,雖然一樣都是造假數據,可是一來不影響程序邏輯,不增長代碼,多人協同開發時,還方便複用和重現; P.S. 便可要勾選 Unmatched requests passthrough, 否則全部請求的返回都會被攔截的;

AutoResponder

7. 其餘方式修改reqeust/response

常碰到須要測試某個數據的時候,服務端又沒有要求的數據,等着後臺生成數據或者使用上面的方法模擬所有數據都比較麻煩,咱們其實能夠直接修改response內容,而後再返回給客戶端的,這就是斷點功能(這裏以斷response爲例);

P.S. 修改request的話能夠以下圖

before request

1. 菜單欄啓用斷點After responses

這種方式會對全部請求都進行斷點

automatic_breakpoints

response被斷點後,能夠在 Inspectors - Response TextView 面板中直接修改返回的數據,也可經過 Choose Response 下拉菜單中選擇預約義的模板或者 經過 find a file 來指定本地文件做爲resposne,相似上面說過的重定向資源:

直接修改數據

2. 命令行臨時斷點

菜單欄開啓斷點會對全部請求都作斷點操做,不太方便,咱們其實也能夠臨時對符合指定條件的請求作斷點: 命令行中支持的幾個斷點方式以下:

// 當這些命令沒有加參數時,會清空全部設置了斷點的Http請求:
bpafter xxx: 中斷 URL 中包含指定字符的所有 session 響應
bps xxx: 中斷 HTTP 響應狀態爲指定字符的所有 session 響應
bpv xxx: 中斷指定請求方式的所有 session 響應
bpm xxx: 中斷指定請求方式的所有 session 響應,等同於bpv xxx
bpu xxx:與bpafter相似
複製代碼

好比輸入: bpafter csdn,就會對全部請求url中含有 csdn 請求,在返回時進行斷點操做; P.S. 其餘比較有用的命令行:

?text 選擇全部 URL 匹配問號後的字符的所有 session
=status 選擇響應狀態等於給定狀態的全部HTTP請求
=method 選擇請求方式爲指定method的請求會話,如 =get
>size 或者 <size 選擇響應大小大於/小於size(單位b)的請求,如 >1k
@host  選擇包含指定 host 的所有 HTTP請求
bold xxx 加粗知足指定條件的會話名,如 bold  csdn,則包含 `csdn` 的請求會被加粗顯示
cls 或者 clear  清空會話列表,不過我習慣用快捷鍵ctrl+a ctrl+x來刪除
select xxx 選擇Content-Type頭中包含指定字符串的響應,可用於選擇文件格式,如 select image
go  跳過當前斷點,跟經常使用工具欄上的 `go` 按鈕功能同樣
urlreplace www.demo.com  www.dev.demo.com  將host爲 'www.demo.com'的請求替換爲'www.dev.demo.com'
複製代碼

3. 腳本配置修改

官方文檔 其實跟從菜單欄啓動斷點功能差很少,只不過更靈活, 經過 Rules - Customize Rules(Ctrl+R) 開啓編輯器,初次運行可能會提示安裝編輯器: 單擊編輯器菜單 go - before OnBeforeResponse 會定位到 OnBeforeResponse 函數,在response返回給客戶端前會先進入該方法,咱們能夠在裏面進行某些設置:

if(oSession.uriContains("http://fepapi.debug.web.nd/v1/master_infos/2080998854")){
    oSession["ui-color"]="#0000ff";//設置顏色
    oSession.oResponse["newResponseHead"]="hello";//添加一個請求頭
    oSession.oResponse.headers.Remove("Date");//刪除請求頭,測試大小寫不敏感,request的相似
}
複製代碼

咱們能夠修改 OnBeforeRequest 函數,對請求頭進行處理:

// 修改查詢路徑和條件 
if(oSession.PathAndQuery==」/v1/master_infos/2080998854」){//除主機名後面的完整部分 
    oSession[「ui-color」]=」red」;// 知足條件時顯示顏色 
    oSession.PathAndQuery=」/v1/master_infos/2079941150」//修改查詢路徑 
}

//修改請求主機名 
if (oSession.HostnameIs(「fepapi.debug.web.nd」)) { 
    oSession.hostname=」www.baidu.com」; 
}
複製代碼

擴展幾個小技巧:

1. 在會話列表中隱藏指定status的會話

能夠參考 Rules - Hide 304s,隱藏304請求的寫法,咱們在 Fiddler ScriptEditor中搜索 304s,發現

// 在菜單欄中增長一個選項,也能夠不用的
public static RulesOption("Hide 304s")
BindPref("fiddlerscript.rules.Hide304s")
var m_Hide304s: boolean = false;

//搜索布爾值 `m_Hide304s`
static function OnBeforeResponse(oSession: Session) {      
  if (m_Hide304s && oSession.responseCode == 304) {
    oSession["ui-hide"] = "true";
  }
}
複製代碼

8. 其餘

部分快捷鍵

定位到命令行 : alt+q 快速改變會話行顏色 : ctrl+N (N爲數字,0表示取消顏色,1爲紅色 ... 可經過 右鍵-mark 查看) 刪除選中的會話 : ctrl+x 反選會話 : ctrl+i (這個配合命令行過濾以及ctrl+x可讓會話列表變得清爽清晰不少)

9. 參考資料

  1. 官方文檔
  2. Fiddler Script 與 HTTP 斷點調試
  3. 調試之Fiddler修改返回結果Response
  4. Fiddler(一)-Fiddler簡介
  5. Fiddler(二)-使用Fiddler作抓包分析
  6. Fiddler(三)-Fiddler命令行和HTTP斷點調試
  7. 用Fiddler模擬低速網絡環境
  8. Fiddler經常使用命令
  9. Mac/linux下使用Fiddler-虛擬機

相關文章推薦: Charles的使用

相關文章
相關標籤/搜索