read
Using request module is the most popular way to get/post to a HTTP endpoint in Node.js.
A common question while using request is: How do I gunzip a HTTP response?
There are multiple solutions I have seen, and some didn’t work for me.
There are some more advanced ones, using streams.
Here’s mine:
var request = require('request');
var zlib = require('zlib');
var options = {
url: 'http://some.endpoint.com/api/',
headers: {
'X-some-headers' : 'Some headers',
'Accept-Encoding' : 'gzip, deflate',
},
encoding: null
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
// If response is gzip, unzip first
var encoding = response.headers['content-encoding']
if (encoding && encoding.indexOf('gzip') >= 0) {
zlib.gunzip(body, function(err, dezipped) {
var json_string = dezipped.toString('utf-8');
var json = JSON.parse(json_string);
// Process the json..
});
} else {
// Response is not gzipped
}
}
});
The above will also fix for Incorrect header check
error, with encoding: null
option.