gpt4 book ai didi

javascript - 如何解码诺克记录的响应

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:55 25 4
gpt4 key购买 nike

如何临时解码/解压缩诺克记录器产生的输出,以便我们可以将响应视为文本?我想我们不明白响应是否经过压缩和/或编码

当我们将它加载到 nock 中时,该对象可以正常工作,并且我们的测试按我们预期的方式运行。要查看 API 生成的内容,我们必须将日志记录语句放入实现文件中。

我们正在记录并保存响应的 JSON:

nock.recorder.rec({output_objects: true, dont_print: true});
JSON.stringify(nock.recorder.play())

我们的文件看起来像:

[
{
"scope": "https://some.api.com:443",
"method": "POST",
"path": "/auth?key=some_key",
"body": {
"logonId": "user@api.com",
"logonPassword": "secret"
},
"status": 400,
"response": [
"1f8b0800000000000000458cbd6ac34010067b3fc5c735691263bb741344ec42f827420a492916692d1d9cb461f71c218cdf3d97266e6786b92d00c7aaa205290d1c59cd6d71bb3fff8b376939a1cd6abd7ac003cf89b97a5f96757efecc8ef9aede9fb2fc586455f5f55eeedca33db119757f0f5704266334a2ca4d44ec19170941263f76f06657b62dd6cb2af919ec9357cc7255f0cb403e4014df643689b6687d3b3e450c149b1e534f1113a3a71f868cb8f8c04b7ca48b8fa08efcf8ea16f75fa1776d91ee000000"
],
"headers": {
"cache-control": "no-store, no-cache, must-revalidate",
"content-encoding": "gzip",
"content-type": "application/json",
"transfer-encoding": "chunked",
"connection": "Close"
}
}
]

最佳答案

来自 http 请求的响应作为 gzip 数据返回,由 content-encoding header 指示。 Nock 将此数据保存为十六进制编码的缓冲区字符串。

您可以使用以下实用程序将这些盒式磁带转换为 json:

var zlib = require('zlib');
var fs = require('fs');
var argv = process.argv.slice(2);
var path = require('path');

var filename = path.resolve(argv[0]);
var file = fs.readFileSync(filename, { encoding: 'utf8' });
var cassettes = JSON.parse(file);

cassettes.forEach(function (cassette) {
if (cassette.headers['content-encoding'] !== 'gzip') {
return;
}

var response = new Buffer(cassette.response[0], 'hex');

var contents = zlib.gunzipSync(response).toString('utf8');

cassette.response = JSON.parse(contents);
delete cassette.headers['content-encoding'];
});

fs.writeFileSync(filename, JSON.stringify(cassettes, null, 2), { encoding: 'utf8' });

请注意,这将用已将所有 gzip 请求转换为 json 的磁带覆盖原始磁带。另请注意,我没有检查内容类型,因此如果您的响应不是 json,则需要对此进行调整。

关于javascript - 如何解码诺克记录的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com