Заставить веб-сервер возвращать несжатые данные (без 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'
но не повезло.
Я вижу два подхода:
- Заставить веб-сервер возвращать несжатые данные.
- Распакуйте сжатые данные, используя модуль 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;
}
});
});