Node.js 膨胀http流返回错误:长度或距离符号太多
我试图编写一些代码来读取HTTP请求的响应,操纵响应并将其转换为base64。所述请求返回Node.js 膨胀http流返回错误:长度或距离符号太多,node.js,gzip,zlib,Node.js,Gzip,Zlib,我试图编写一些代码来读取HTTP请求的响应,操纵响应并将其转换为base64。所述请求返回内容类型应用程序/八位字节流和内容编码:gzip的数据 以下是响应的标题: Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: https://...... Connection: close Content-Disposition: attachment; filename="file/myfilename
内容类型应用程序/八位字节流
和内容编码:gzip
的数据
以下是响应的标题:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://......
Connection: close
Content-Disposition: attachment; filename="file/myfilename.jpg"
Content-Encoding: gzip
Content-Length: 25586
Content-Type: application/octet-stream
Date: Fri, 13 Sep 2019 10:22:28 GMT
Server: nginx`
到目前为止,我的代码是:
let zlib_gunzip = '';
const httprequest = await request({
method: 'GET',
url: 'https://......',
timeout: 20000,
resolveWithFullResponse: true,
});
const data = httprequest.body;
try {
zlib.inflateRaw(Buffer.from(data, 'binary'), (err, inflated) => {
if (!inflated) zlib_gunzip = err;
zlib_gunzip = inflated.toString('base64');
});
} catch (error) {
zlib_gunzip = error;
}
return {
zlib_gunzip,
};
为了简化,省略了库声明
生成错误:长度或距离符号过多
我可以看到一个响应被返回,并且人眼无法读取(就像我认为应该的那样,因为它被编码为gzip)。错误是在尝试扩大此响应时生成的
我可以尝试包含gzip-ed响应,但我不确定它是否有帮助。但是,据我所知,有一些服务正在使用相同的请求并成功地将响应转换为有效文件
不幸的是,我不能包括请求的URL,因为它是动态生成的并且是机密的
这是示例响应的屏幕截图:
您使用的请求库会自动为您提取流。如果您查看响应,它的子字符串
JFIF
位于字节6-10,这意味着它是一个JPEG文件,实际上非常有用。结果表明,尽管报头指示我正在接收一个gzip-ed数据流,但需要转换为base64的是普通的二进制数据。将更新代码与一个小的更正,我不得不作出。