针对同一接口不同指定场景进行mock返回(fiddler)

533 阅读2分钟

最近在工作中遇到一个问题是,针对同一个接口的指定参数值(post的boby的某个字段为XXX时)的请求,才将其拦截并修改返回值。研究了一下有两种方式可以实现。

fiddler everywhere

fiddler everywhere:是一款可以运行在任何浏览器,任何系统、跨平台(Windows、Mac、Linux)的一款Web调试代理工具(下载链接)。它记录了计算机和Internet之间的所有HTTP(S)通信,可以检查和编辑通信,并拥有Mock请求以及修改响应返回的能力。可以把它看成fiddler+postman。

image.png

image.png

如果想对同一接口的不同指定参数进行修改,可以添加rules,设置如果匹配boby中包含373(我涉及的情况此值唯一,可以直接这么筛选,如果需要更针对性的筛选可以设置boby Is equal to XXX)

image.png

1051653555790_.pic_hd.jpg

设置完成后点击Execute按钮可以查看是否能筛选出数据,如可打开rules开关,在下次抓包时rules即可生效。可针对性打开具体某个rule开关。

image.png

rules中的condition和action的可配置项很多,具体使用说明可参考官方文档

fiddler script

另一种方法就是使用Fiddler抓包工具,修改CustomRules.js脚本(打开路径:Rules-> Customize Rules)达到修改Http请求的Response中Body信息(如JSON串),其中我们比较常修改的方法如下:

  • OnBeforeRequest:static function OnBeforeRequest (oSession: Session)函数在每次请求之前调用。在这个方法中修改Request的内容,我们用得最多。
  • OnBeforeResponse:static function OnBeforeResponse (oSession: Session)函数在每次响应之前调用,在这个方法中修改 Response 的内容。
  • static function OnExecAction (sParams: String [ ] )这个方法中包含 Fiddler 命令。命令是在Fiddler 界面中左下方的 QuickExec 中执行的。

拿我们上面的例子来说,我们就可以利用FiddlerScript获取请求参数,请求中有指定参数时修改返回值:

在OnBeforeResponse中增加处理代码如下:


if (oSession.fullUrl.Contains("http://xxx.xxxxxx.com/XX/XX"))
          {
              
              // 获取Response Body、Request Body中JSON字符串,转换为可编辑的JSONObject变量
              var responseStringOriginal =  oSession.GetResponseBodyAsString();            
              var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
  
              var requestStringOriginal=oSession.GetRequestBodyAsString();
              var requestJSON = Fiddler.WebFormats.JSON.JsonDecode(requestStringOriginal);
             
             
             if(requestJSON.JSONObject['type']==1){ //请求参数中,若type为1,对返回值做如下修改
 
                 // 修改字段
                 responseJSON.JSONObject['Message'] = "获取成功修改后后";
                 responseJSON.JSONObject['Info']['LiveInfoList'][0]['LiveName']="直播测试5修改返回值后";
  
                 // 添加字段
                 var teacherinfo= '[{"name":"Wang", "title":"senior"},'+
                 '{"name":"Li", "title":"senior"}]';
                 responseJSON.JSONObject['teacherinfo'] = Fiddler.WebFormats.JSON.JsonDecode(teacherinfo).JSONObject ;
             
                 // 重新设置Response Body
                 var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
                 oSession.utilSetResponseBody(responseStringDestinal);
             }
         }
 }

保存后再抓包即可生效。