Заставить веб-сервер возвращать несжатые данные (без gzip)

Я использую модуль http node.js для выполнения http-запросов. Я хочу заставить веб-сервер возвращать несжатые данные. [Нет gzip, нет дефлята].

Заголовки запроса

headers: {
  'Accept-Encoding': 'gzip,deflate,sdch',
  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/31.0.1650.57 Chrome/31.0.1650.57 Safari/537.36',
}

Я пытался использовать это 'Accept-Encoding': '*;q=1,gzip=0' но не повезло.

Я вижу два подхода:

  1. Заставить веб-сервер возвращать несжатые данные.
  2. Распакуйте сжатые данные, используя модуль nodeJs

Я хочу пойти на #1.

1 ответ

Решение

Если вы делаете запросы HTTP на внешний сервер, который вы не можете контролировать, и он не реагирует на Accept-Encoding заголовок запроса, затем вы должны обработать сжатый ответ и распаковать его позже. Я предлагаю вам использовать модуль zlib. Вот пример:

var zlib = require('zlib');

//...

request.on('response', function(response){
  var contentEncoding = response.headers['content-encoding'];

  response.on('data', function(data){
    switch(contentEncoding){
      case 'gzip':
        zlib.gunzip(data, function(error, body){
          if(error){
            //Handle error
          } else {
            //Handle decompressed response body
          }
        });
        break;
      case 'deflate':
        zlib.inflate(data, function(error, body){
          if(error){
            //Handle error
          } else {
            //Handle decompressed response body
          }
        });
        break;
      default:
        //Handle response body
        break;
     }
  });
});
Другие вопросы по тегам