首先点击菜单栏中的Rules->Customize Rules(Crtl+R)打开脚本编辑器。千万千万不要直接点击Fiddler右侧的Fiddler Script,在那里面直接改是不生效的。
抛砖引玉就举一个例子来讲吧
修改Response里的JSON内容
假设请求的接口为 http://test.example.com/api/test
响应内容为
{
"ret": "OK",
"data": {
"id": 1001,
"name": "James"
}
}
我们想把Response里面的name改成Jack,其他不变,可以使用如下代码实现
首先找到static function OnBeforeResponse(oSession: Session)
在下面追加如下代码:
static function OnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
//下面为追加代码
if(oSession.fullUrl.Contains(http://test.example.com/api/test)){
var responseStr = oSession.GetResponseBodyAsString(); //获取响应内容
var jsonStr = Fiddler.WebFormats.JSON.JsonDecode(responseStr); //解析JSON,如果需要改变的是Body内容,则不需要解析JSON这步
jsonStr.JSONObject["data"]["name"] = "Jack";
var mod_json = Fiddler.WebFormats.JSON.JsonEncode(jsonStr.JSONObject); //封装修改后的JSON,如果需要改变的是Body内容,则不需要封装JSON这步
oSession.utilSetResponseBody(mod_json); //将封装后的JSON放入Response中
}
}
如果我需要把id前面两个数字改为id_,则使用正则匹配比较方便,代码如下:
static function OnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
//下面为追加代码
if(oSession.fullUrl.Contains(http://test.example.com/api/test)){
var responseStr = oSession.GetResponseBodyAsString(); //获取响应内容
var jsonStr = Fiddler.WebFormats.JSON.JsonDecode(responseStr); //解析JSON,如果需要改变的是Body内容,则不需要解析JSON这步
var reg_ex = /\d\d/; //正则表达式
var id = jsonStr.JSONObject["data"]["id"]; //取出旧的id值
var new_id = id.replace(reg_ex, "id_"); //使用正则将 1001替换为id_01
jsonStr.JSONObject["data"]["id"] = new_id; //将新的id值赋值到id字段
var mod_json = Fiddler.WebFormats.JSON.JsonEncode(jsonStr.JSONObject); //封装修改后的JSON,如果需要改变的是Body内容,则不需要封装JSON这步
oSession.utilSetResponseBody(mod_json); //将封装后的JSON放入Response中
}
}