Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 膨胀http流返回错误:长度或距离符号太多_Node.js_Gzip_Zlib - Fatal编程技术网

Node.js 膨胀http流返回错误:长度或距离符号太多

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

我试图编写一些代码来读取HTTP请求的响应,操纵响应并将其转换为base64。所述请求返回
内容类型应用程序/八位字节流
内容编码: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的是普通的二进制数据。将更新代码与一个小的更正,我不得不作出。