編輯:關於Android編程
對於前端開發,Fiddler應該是比較常用的網絡請求監聽工具了,之前為了跨平台還想使用wireshark,但是發現相比起來不太友好,折騰過後才發現原來Fiddler也有linux和mac版本(多虧了.net開源,需要安裝mono,後面會有鏈接,當然體驗會差點),本文就介紹幾個有用卻被用得比較少的技巧(本文基於Fiddler V4.6);
Fiddler在客戶端和服務器之間假設了一個代理,我們可以通過它對請求和響應進行各種操作,
win
mac/linux
linux中需要安裝mono:
sudo apt-get install mono-complete mono Fiddler.exe
Fiddler也可以安裝插件,由於安裝的時候碰到點坑,這裡也記錄一下: 到 這裡 下載插件,我下載了一個 Traffic Differ
, 是個
exe 文件,雙擊安裝並重啟Fiddler(
File-exit ,然後重新啟動)後,選擇了任意兩個請求,
右鍵-compare(ctrl+w) ,提示我找不到
WinDiff.exe ,使用
EveryThing 搜索後發現生成的
WinDiff.exe 在
C:\Program Files (x86)\Microsoft WebMatrix 中,這個目錄不再我系統
path 環境變量下,導致找不到,添加下即可;
P.S. 插件運行後除了生成 WinDiff.exe外,還在
Fiddler2/Scripts 目錄下生成了
Differ.dll,可以查看下,另外,插件是否安裝也可以在
tools –
Telerik Fildder Options –
Extensions 面板中查看;
3. 開啟代理,實現請求中轉
1. 設置Fiddler端口,允許遠程連接
單擊菜單欄:
tools –
Telerik Fildder Options –
Connections,進行如下設置,其中端口號可以自定義,不沖突即可,並允許遠程連接;
2. 手機端設置Wifi代理
當然,Fiddler安裝的主機要跟手機在同一個無線網絡中,在手機中設置wifi代理參數,其中端口號就是Fiddler中設定的,而路由ip地址是Fiddler所在主機的網址:
至此我們就成功使用Fiddler作為手機的代理了;
3. Filters過濾器設置
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="4-composer模擬請求">主要設定好後,要單擊
Actions -
Run Filterset Now 來使過濾條件生效
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, 不然所有請求的返回都會被攔截的;
7. 其他方式修改reqeust/response
常碰到需要測試某個數據的時候,服務端又沒有要求的數據,等著後台生成數據或者使用上面的方法模擬全部數據都比較麻煩,我們其實可以直接修改response內容,然後再返回給客戶端的,這就是斷點功能(這裡以斷response為例);
P.S. 修改request的話可以如下圖
1. 菜單欄啟用斷點After responses
這種方式會對所有請求都進行斷點
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 或者 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”;
}
8. 其他
部分快捷鍵
定位到命令行 : alt+q
快速改變會話行顏色 : ctrl+N (N為數字,0表示取消顏色,1為紅色 … 可通過 右鍵-mark 查看)
刪除選中的會話 : ctrl+x
反選會話 : ctrl+i (這個配合命令行過濾以及ctrl+x可以讓會話列表變得清爽清晰很多)
本文實例介紹了Android如何畫出觸摸軌跡的方法,分享給大家供大家參考,具體內容如下效果圖:實現代碼:package com.android.gameview5;imp
研究了一下android的apk的簽名和代碼的混淆打包,如果不混淆打包,那麼apk可以直接被人反編譯出來查看源碼,混淆打包雖然還是能看懂,但是沒有那麼好懂了,至少要話費些
本文首先解釋一下handler是用來干嘛的,然後通過例子介紹其在多線程中的應用。什麼是Handlerhandler通俗一點講就是用來在各個進程之間發送數據的處理對象。在任
GridView網格視圖,網格視圖組件,九宮圖顯示數據表格(一種控件)ScrollView滾動視圖是一個單一容器,只能包含一個組件。ViewPager左右滑動SlideM