首页 > 技术文章 > 日常问题记录--使用fiddler自动响应jsonp结构的响应

carterzhang 2017-10-19 20:41 原文

#问题表现#

在使用fiddler做对请求做mock时,有时需要对jsonp格式响应进行映射;

jsonp响应的特点为callback为一个随机字符串;

使用普通的fiddler 做mock无法进行正常mock;

#解决办法#

  1. 保留响应中的callback函数名;
  2. 替换响应内容;

#实现#

  1. fiddler修改脚本,增加读取本地文件内容的函数;
  2. 修改OnBeforeResponse,替换响应内容;
  3. 下面代码快中OnBeforeResponse被注释的部分根据url中关键词进行替换;
  4. 注意本地文件的编码需要与请求的编码一致;
  static function readFile(filename)
    {
        var fso = new ActiveXObject( "Scripting.FileSystemObject");
        var f = fso.OpenTextFile(filename, 1);
        var s = "";
        while(!f.AtEndOfStream)
            s += f.ReadLine();
        f.Close();
        return s;
    }

    static function OnBeforeResponse(oSession: Session) {
        if (m_Hide304s && oSession.responseCode == 304) {
            oSession["ui-hide"] = "true";
        }
        
    /*    if(oSession.url.indexOf("RrjfGetJifenPointList") > 1){
            oSession.utilDecodeResponse();
            var body = oSession.GetResponseBodyAsString();
            var string = readFile("C:\\Users\\xxx\\Desktop\\aaabbb.txt");
            var index = body.indexOf('(');
            var b = body.slice(0, index);
            body = b + '('+ string + ')';
            oSession.utilSetResponseBody(body);
        }
      
        if(oSession.url.indexOf("RrjfGetAssistUserList") > 1){
            oSession.utilDecodeResponse();
            var body = oSession.GetResponseBodyAsString();
            var string = readFile("C:\\Users\\xxx\\Desktop\\aaabbb.txt");
            var index = body.indexOf('(');
            var b = body.slice(0, index);
            body = b + '('+ string + ')';
            oSession.utilSetResponseBody(body);
        }
*/ if(oSession.url.indexOf("CommonAppointSubmit") > 1){ oSession.utilDecodeResponse(); var body = oSession.GetResponseBodyAsString(); var string = readFile("C:\\Users\\xxx\\Desktop\\aaabbb.txt"); var index = body.indexOf('('); var b = body.slice(0, index); body = b + '('+ string + ');}catch(e){}'; oSession.utilSetResponseBody(body); }
}

#其他#

  1. fiddler使用微软的JScript,而JScript是可以对windows本地文件做读写,注意包括写操作;
  2. 后续想编写一个自己的fiddler插件,实现jsonp的mock,自动生成jmeter用例,上传指定url到扫描平台等功能,方便日常使用;

推荐阅读