Fiddler教程 第五节:修改RESPONSE的数据
修改response的数据(一)
在项目中也经常也会碰到根据接口返回的数据不同而展示不同的效果。如果单个单个去真实的造数据会比较麻烦,况且有时候造数据也是一件很麻烦甚至无从下手的事情。
Fiddler可以修改response的数据,可以很轻松方便的解决我们造数据的苦恼。
修改response的数据
在修改数据之前,需要先明白在哪里修改这些数据,需要知道如下的函数: static function OnBeforeResponse(oSession: Session) 在请求返回之前执行的函数,所以修改response的数据就在此函数中。
修改数据
需求是:会为返回的JSON中修改一个字段的数据,将click_url的值变更一下。
核心流程图
在 OnBeforeResponse(oSession: Session) 中添加以下的代码
static function OnBeforeResponse(oSession: Session) {
//将美国的fixfor的clickurl替换成这个新加坡请求的clickurl
if (oSession.uriContains("flow/intercept")){
oSession["ui-color"] = "red";
var newclickurl: String = "http://pixel.admobclick.com/v1/click";
// 获取Response Body中JSON字符串
var responseStringOriginal = oSession.GetResponseBodyAsString();
// 转换为可编辑的JSONObject变量
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
// 修改JSONObject变量,修改字段数据
responseJSON.JSONObject["click_url"] = newclickurl;
// 重新设置Response Body
var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
oSession.utilSetResponseBody(responseStringDestinal);
}
}
代码调整之后,一定要重启Fiddler重新加载CustomRules.js。
修改response的数据(二)
添加数据
有时候也会需要给response的返回内容中添加数据,它的原理和基本流程和上一节课讲的一样,在这里就不再重复的说明。
static function OnBeforeResponse(oSession: Session) {
if (oSession.uriContains("ads/sdk/v4")){
oSession["ui-color"] = "red";
var tester1 = "{ \"name\" : \"zwf\" , \"age\" : \" 26 \" }";
var tester2 = "{ \"name\" : \"zch\" , \"age\" : \" 24 \" }";
var testerList = "["+tester1 +"," + tester2 +"]";
var responseStringOriginal = oSession.GetResponseBodyAsString();
//以alter的方式弹个对话框提示json字符串内容,可以方便用来调试
// FiddlerObject.alert(responseStringOriginal);
//转换成JSON之后,数据的读取就设计到json的相关知识点了,这里就不做介绍了
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
responseJSON.JSONObject[0]["key"] = "zwfGood";
responseJSON.JSONObject[0]["testerList"] = Fiddler.WebFormats.JSON.JsonDecode(testerList).JSONObject ;
var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
oSession.utilSetResponseBody(responseStringDestinal);
}
}
修改之前的json数据:
修改之后的json数据:
修改Response的数据(三)
之前的教程中有讲到如何通过修改CustomRules.js文件来达到修改Response数据的目的,今天我们来分享如何在打断点的时候修改Response
1、打断点
之前有讲到,若是修改响应的数据,应该在after response 打断点,故打断点的步骤是,Rules->Automatic Breakpoints -> After Responses
如下图所示,请求被阻止:
右下角的页签,切换到Transformer
做如下的操作:
取消 Chunked Transfer-Encoding 的选择,该项默认是被选中的。
HTTP Compression 选择 None
怎么解释这些操作的意思呢?
官方是这样解释的:
To improve performance, response bodies may be compressed and/or delivered in chunks. Before examining or modifying such responses, you may wish to decompress or unchunk them using the Transformer.
大概意思就是说,为了提高性能,响应体是有被压缩或者采用chunked(块)的方式传输,但是如果你要修改响应体,则希望是不压缩不编码.
仔细的讲解一下这一块:
如下图所示,这是默认的选项:
切换到Raw选项,如下图所示:
如果取消了Chunked Transfer-Encoding,选择了None,查看Raw
2、修改response
好,接着我们的打断点修改Response,修改响应体当然也就是修改Raw的内容了,切换到Raw,就可以修改内容了:
修改之后,点击 Run to Completion ,接口响应200 ,数据修改成功!
这种方式是不是更简单一点呢,不用去view代码,但是如果要多次执行时,每一次操作都要这样修改,比较繁琐,而且很容易造成错误。
两种方法都可以,没有哪个好哪个不好,选择适合自己的就很好!
日拱一卒无有尽,
功不唐捐终入海。
——谱儿