AppCrawler AnyProxy 在 --file,输出的日志中,能打印出 响应报文的,报文体,并且支持中文显示

孟德 · 2016年11月11日 · 最后由 taurusbb 回复于 2017年04月25日 · 1990 次阅读

想法:在做自动遍历时,使用 AnyProxy 获取应用 运行时的所有请求和响应报文,可以在遍历时,如果被测应用出现业务报错,能将报文中的报错信息记录下来;
遍历过程中,通过报错 code 码黑名单到日志中进行捞取,可以及时告警发现的业务异常;

AnyProxy 在 --file,输出的日志中,没有输出 响应报文的,报文体,通过查 recorder.js 中的 info 信息,

recorder.js 片段:

function normalizeInfo(id,info){
    var singleRecord = {};
    console.info(info);

info.resbody 存放的是 响应报文;
不过 resbody 不只有字符串的返回,也包括图片、音频等其他的返回,因此直接显示字符串是不合适的,需要进行区分;

recorder.js 片段:

//res
if(info.endTime){
    singleRecord.statusCode= info.statusCode;
    singleRecord.endTime   = info.endTime;
    singleRecord.resHeader = info.resHeader;
    singleRecord.length    = info.length;
    singleRecord.resBody    = info.resBody;
    if(info.resHeader['content-type']){
        singleRecord.mime      = info.resHeader['content-type'].split(";")[0];
    }else{
        singleRecord.mime      = "";
    }
    // 补充内容
    if(singleRecord.mime='application/json'){
        singleRecord.resBody = info.resBody.toString();
    }else{
        singleRecord.resBody = "";
    }

共收到 3 条回复 时间 点赞

第一次发,在解决这个问题是还是碰到不少问题,在 github 上提问受到提醒才 弄出来的;
感谢 codingfishman

codingfishman commented 2 days ago
Hi @mengde0077
你是不是说 recorder.js 中的 normalizeInfo?
resBody 放置的是 Buffer 对象,因此直接打印出来的话就不是期待中的字符串。
resbody 不只有字符串的返回,也包括图片、音频等其他的返回,因此直接显示字符串是不合适的,需要进行区分。 你可以参考 recorder.js 中的 getDecodeBody, 来看一下如何处理。

另外,可否也帮我们描述一下你将日志输入到 file 的场景是什么? 方便我们后续完善:)

谢谢

感激~ 正需要这个👏 👏 👏

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册