Gzip解压缩http响应

时间:2016-08-31 09:42:41

标签: node.js http-headers httprequest gzip compression

使用request模块,我试图从API服务中获取响应,该服务在API请求中具有以下标头:

  

accept-encoding:gzip

并相应地,在响应中的标题后面:

  

content-encoding:gzip

当我尝试使用zlib(引用here)解压缩响应(获得正确的可读响应)时,我无法这样做。


代码段:

var options = {
        url: url,
        qs: params.qparams,
        method: params.method,
        json: params.body,
        headers: {
            'api_key': configkey,
            'Content-Type': 'application/json',
            'Accept-Encoding': 'gzip'
        },
        timeout: constants.request_timeout
    };
request(options, function(err, response, body) {

        var encoding = response.headers['content-encoding']
        if (encoding && encoding.indexOf('gzip') >= 0) {
          zlib.gunzip(body, function(err, dezipped) {
            //ERROR : { [Error: incorrect header check] errno: -3, code: 'Z_DATA_ERROR' }
            var json_string = dezipped.toString('utf-8');
            var json = JSON.parse(json_string);
            console.log('\nJSON ::\n',json);
          });
        } else {
            console.log('\n\nRESPONSE IS NOT GZIPPED!');
        }
}   

我在这里收到错误(在代码中注释),使用zlib。

我无法弄清楚它出错的地方,尝试了多个npm模块,如unzipResponsecompress-buffer,尝试了不同的方法以及在各个地方建议处理gzip。

如果有人可以帮忙解决这个问题,我会非常感激。

1 个答案:

答案 0 :(得分:2)

我有一个解决方案,因为 需要在选项 对象中再添加一个键:

var options = {
        url: url,
        qs: params.qparams,
        method: params.method,
        json: params.body,
        headers: {
            'api_key': configkey,
            'Content-Type': 'application/json',
            'Accept-Encoding': 'gzip'
        },
        timeout: constants.request_timeout,
        encoding: null 
    };

如果某人有更好的方法来执行解压缩,请添加。