?關(guān)于數(shù)據(jù)修改,你知道多少兄猩?茉盏!
?Fiddler 功能
大家都說(shuō)Fiddler工具很強(qiáng)大鉴未,那么Fiddler到底有哪些功能呢?我們用下面這幅圖就可以簡(jiǎn)單地概括總結(jié)一下:
圖片雖然不是很美觀鸠姨,但是將fiddler的功能總結(jié)得很是精辟歼狼,它高大上的內(nèi)涵足以支撐簡(jiǎn)陋的門(mén)面,厲害了享怀,老鐵!
言歸正傳趟咆,從這幅圖上我們可以很清晰的看出Fiddler是用來(lái)捕獲數(shù)據(jù)添瓷,并對(duì)數(shù)據(jù)進(jìn)行分析,甚至可以對(duì)數(shù)據(jù)進(jìn)行修改值纱。在平時(shí)的測(cè)試工作中用到最多的功能也是修改數(shù)據(jù)鳞贷,在我的博客中瀏覽量最高的也是關(guān)于如何修改數(shù)據(jù)的文章,所以就專門(mén)寫(xiě)這篇文章來(lái)總結(jié)一下修改數(shù)據(jù)的幾種方法虐唠,大家可以權(quán)衡一下利弊搀愧,根據(jù)實(shí)際情況來(lái)選擇合適的方法,提高自己的工作效率疆偿。
一咱筛、打斷點(diǎn)修改數(shù)據(jù)
(一)Request
打斷點(diǎn)修改Request的數(shù)據(jù),步驟如下:
1杆故、設(shè)置Rules->Automatic Breakpoints->Before Requests迅箩。
2、發(fā)起請(qǐng)求处铛,被Fiddler攔截饲趋。
3、雙擊被攔截的請(qǐng)求撤蟆,在Inspectors->右上方(右上方展示的是request的相關(guān)信息)->SyntaxView tab頁(yè)中直接修改數(shù)據(jù)奕塑,例子中我們將”country”: “CN” 修改為 “country”: “US”。在Inspectors其它類似的tab頁(yè)中也可以修改數(shù)據(jù)家肯,只是我比較習(xí)慣在SyntaxView 這個(gè)tab頁(yè)中修改龄砰。數(shù)據(jù)可以做任何的修改,當(dāng)然也可以整體替換這些請(qǐng)求的數(shù)據(jù)息楔。
4寝贡、修改之后,點(diǎn)擊綠色的Run to Completion 放行斷點(diǎn)值依。
5圃泡、斷點(diǎn)被放行之后,驗(yàn)證Request的參數(shù)是否修改成功愿险,如圖所示”country”: “US”颇蜡,說(shuō)明修改成功价说。
(二)Response
打斷點(diǎn)修改response數(shù)據(jù),步驟如下:
1风秤、設(shè)置Rules->Automatic Breakpoints->Before Responses鳖目。
2、發(fā)起請(qǐng)求缤弦,被Fiddler攔截领迈。
3、雙擊被攔截的請(qǐng)求碍沐,在Inspectors->右下方(右下方展示的是response相關(guān)的信息)->SyntaxView tab頁(yè)中直接修改數(shù)據(jù)狸捅,數(shù)據(jù)可以被任意修改,例子中我們把”adaction”:”install” 修改成”adaction”:”install—zwf”累提。
4尘喝、修改之后,放行斷點(diǎn)
5斋陪、斷點(diǎn)被放行之后朽褪,驗(yàn)證response的數(shù)據(jù)是否修改成功。如圖所示”adaction”:”install—zwf”无虚,說(shuō)明response的數(shù)據(jù)修改成功缔赠。
敲黑板知識(shí)點(diǎn)
OK,這個(gè)方法學(xué)會(huì)了嗎骑科?是不是很簡(jiǎn)單呢橡淑?!那我們來(lái)簡(jiǎn)單的分析總結(jié)一下:打斷點(diǎn)修改Request數(shù)據(jù)的方法和修改Response數(shù)據(jù)的方法兩者很相似咆爽,也很簡(jiǎn)單梁棠,在Fiddler的窗口界面上都可以完成操作。但是斗埂,轉(zhuǎn)折來(lái)了啊符糊,請(qǐng)大家注意,打斷點(diǎn)修改數(shù)據(jù)的方法不太適合頻繁的修改接口的數(shù)據(jù)呛凶,操作步驟雖不復(fù)雜但是擱不住大量的操作男娄,在修改的過(guò)程中也很容易出現(xiàn)一不小心手一抖將數(shù)據(jù)修改錯(cuò)誤的情況,同時(shí)這種方式修改數(shù)據(jù)要特別留意請(qǐng)求超時(shí)的問(wèn)題漾稀。
二模闲、局部修改數(shù)據(jù)
什么是局部修改數(shù)據(jù)呢?就是在接口原本的數(shù)據(jù)上進(jìn)行數(shù)據(jù)的調(diào)整崭捍。我們不再在界面上操作了尸折,而是通過(guò)修改CustomRules.js腳本來(lái)實(shí)現(xiàn)。
快捷鍵 Ctrl+R 打開(kāi) Fiddler ScriptEditor殷蛇。
(一)Request
找到static function OnBeforeRequest(oSession: Session) {}实夹,在此方法中進(jìn)行Request數(shù)據(jù)的修改橄浓。看方法名也很容易明白這個(gè)方法的作用亮航,在發(fā)送請(qǐng)求之前進(jìn)行的操作荸实。
需求:把A接口Request中的country=CN 中的CN調(diào)整為US。
CustomRules.js腳本文檔調(diào)整如下:
在 OnBeforeRequest(oSession: Session) 中添加以下的代碼:
if (oSession.uriContains(“sdk/v4”)) {
oSession[“ui-color”] = “red”;
oSession.utilReplaceInRequest(“CN”, “US”);
}
講解一下:
1缴淋、首先需要先定位到該接口准给,判斷oSession的uri中是否包含關(guān)鍵字【sdk/v4】(請(qǐng)求的接口地址)
2、oSession[“ui-color”] = “red”;設(shè)置為該接口為紅色重抖,方便查看
3圆存、oSession.utilReplaceInRequest(“CN”, “US”); 將Request的Body中所有的CN修改為US。
4仇哆、驗(yàn)證一下,如下圖夫植,說(shuō)明修改成功讹剔。
該方法中最關(guān)鍵的方法是 oSession.utilReplaceInRequest(String A,String B),將Request的Body中所有的A修改為B详民,所有的A修改為B延欠,所有的A修改為B,重要的事情說(shuō)三遍沈跨。
在Response中也有與此相對(duì)應(yīng)的方法由捎,oSession.utilReplaceInResponse(String A,String B),將Response的Body中所有的A修改為B饿凛。
(二)Response
找到static function OnBeforeResponse(oSession: Session) {}狞玛,在此方法中進(jìn)行Response數(shù)據(jù)的修改。
上面utilReplaceIn**()修改數(shù)據(jù)的方法需要提前很明確地知道替換的內(nèi)容涧窒,可是在實(shí)際的工作中接口的數(shù)據(jù)都是動(dòng)態(tài)獲取的心肪,很顯然這個(gè)方法就有些局限了。
工作中遇到最多的是調(diào)整某個(gè)key的value值纠吴,value值是動(dòng)態(tài)的硬鞍,但是key絕對(duì)是固定不變的。
一個(gè)請(qǐng)求無(wú)論是post方法還是get方法戴已,發(fā)送的Request還是接收的Response都是有固定的數(shù)據(jù)格式固该,比如application/json,application/x-www-form-urlencoded糖儡。這些數(shù)據(jù)格式是通過(guò)content-type來(lái)定義伐坏,什么是content-type呢?顧名思義休玩,內(nèi)容類型著淆,用來(lái)指定不同格式的數(shù)據(jù)信息劫狠。 就是在header中指定body中的數(shù)據(jù)格式。
application/x-www-form-urlencoded:數(shù)據(jù)被編碼為名稱/值對(duì)永部。這是標(biāo)準(zhǔn)的編碼格式独泞。 application/json : json格式的數(shù)據(jù)。
Fiddler中怎么查看content-type苔埋?
如下圖所示懦砂,查看A請(qǐng)求Request的content-type信息:application/x-www-form-urlencoded:
如下圖所示,查看A請(qǐng)求Response的content-type信息:application/json:
需求:將A接口Response的Body中的adaction(key)的value值變成”install—zwf”
CustomRules.js腳本文檔調(diào)整如下:
在 OnBeforeResponse(oSession: Session) 中添加以下的代碼:
if(oSession.uriContains(“sdk/v4”)) {
? oSession[“ui-color”] = “red”;
? var content_type = oSession.oResponse.headers[“Content-Type”];
? //先判斷Content-Type是否為json组橄,為ture才可以進(jìn)行json數(shù)據(jù)格式的轉(zhuǎn)換
? ? if(content_type.IndexOf(“application/json”) != -1){
? ? // 獲取Response Body中JSON字符串
? ? var responseStringOriginal = oSession.GetResponseBodyAsString();
? ? // 轉(zhuǎn)換為可編輯的JSONObject變量
? ? var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
? ? // 修改JSONObject變量荞膘,修改字段數(shù)據(jù),這里涉及到j(luò)son數(shù)據(jù)的解析玉工,相關(guān)知識(shí)請(qǐng)大家自行腦補(bǔ)
? ? responseJSON.JSONObject[0][“adaction”] = “install—zwf”;
? ? // 重新設(shè)置Response Body
? ? var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
? ? oSession.utilSetResponseBody(responseStringDestinal);
? ? }
}
捕捉請(qǐng)求羽资,驗(yàn)證一下,如下圖所示遵班,修改成功:
一定要根據(jù)content-type的數(shù)據(jù)格式進(jìn)行相應(yīng)的數(shù)據(jù)轉(zhuǎn)換和解析屠升。同理面氓,Request類似數(shù)據(jù)的修改也可以參照這個(gè)方法交汤。
三闻葵、整體替換數(shù)據(jù)
整體替換數(shù)據(jù)熊咽,就是不在原本的接口數(shù)據(jù)上進(jìn)行調(diào)整靴拱,直接將整個(gè)body一鍋端都替換掉铁材,這個(gè)思路很是簡(jiǎn)單粗暴呢碗暗。
(一)Request
CustomRules.js腳本文檔調(diào)整如下:
static functionOnBeforeRequest(oSession: Session) {
? //在OnBeforeRequest中增加以下代碼
? if(oSession.uriContains(“/sdk/v4”)) {
? ? oSession[“ui-color”] = “green”;
? ? //獲取request中的body字符串
? ? varstrBody = oSession.GetRequestBodyAsString();
? ? strBody = “修改后的body內(nèi)容 “;
? ? oSession.utilSetRequestBody(strBody);
? }
}
也可以通過(guò)類似的思路方法整體替換Response的數(shù)據(jù)探熔。
(二)Response
整體替換Response的數(shù)據(jù)亩鬼,除了上面提到的方法殖告,還有一個(gè)更簡(jiǎn)單粗暴行之有效的方法。Fiddler的AutoResponder功能雳锋。如下圖所示:
備注:Fiddler的AutoResponder功能若不是很熟悉的話丛肮,請(qǐng)大家自行學(xué)習(xí)一下(另一本書(shū):fiddler抓包讓數(shù)據(jù)無(wú)處可藏),本篇只提供這樣的一種解決思路和方法魄缚。
敲黑板知識(shí)點(diǎn)
另外需要特別強(qiáng)調(diào)一點(diǎn)的是宝与,如果A接口通過(guò)AutoResponder功能來(lái)替換Response的數(shù)據(jù),那么該請(qǐng)求就沒(méi)有發(fā)送到服務(wù)端冶匹,fiddler在前端捕獲到A接口之后习劫,就直接將AutoResponder指定的Response返回給前端或者客戶端。這一點(diǎn)很是重要嚼隘!重要7汤铩!重要7捎肌0啤灸眼!
四、總結(jié)
幾種修改數(shù)據(jù)的方法已經(jīng)和大家分享了墓懂,意不意外焰宣?驚不驚喜?開(kāi)不開(kāi)心捕仔?刺不刺激匕积?居然還有這種操作?扎心了榜跌,老鐵闪唆!? 那么趕快操練起來(lái)吧,童鞋們钓葫,拿出你的FreeStyle悄蕾,秀出你的魔性。