2016-08-31 2 views
0

Использование request модуля, я пытаюсь принести ответ от веб-сервиса, который имеет следующие заголовок в запросе API:Gzip декомпрессия HTTP Response

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, например unzipResponse и compress-buffer, и пробовал разные подходы, а также предлагал в разных местах для обработки gzip.

Если кто-то может помочь в решении этого вопроса, я буду очень благодарен.

ответ

1

Я получил решение как нужно добавить еще один ключ к опциям объекта как:

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 
    }; 

Если кто-то имеет лучший подход к выполнению декомпрессии, пожалуйста надстройка.

Смежные вопросы