添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

fiddler everywhere

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

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

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

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);

    保存后再抓包即可生效。