Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to decode gzip or utf-8 response in node?

I am using node request module to do some get request.I am getting the response body like

{
   body: '\u001f?\b\u0000\u0000\u0000\u0000\u0000...............' 
}

i have the header parameters and request like this,

var params = {
          url: options.url,
          headers: {
                'Accept-Encoding': "gzip, deflate",
                'Accept': '*/*',
                'Accept-Language': 'en-US,en;q=0.5',
                'Accept-Charset' : 'utf-8',
                'Content-Type' : 'application/json',
                 'User-Agent' : 'Mozilla/5.0'
             }
         };

 request(params, function (error, response, body) {   

        //response.setEncoding('utf8');
        //response.setEncoding('binary');

        console.log(response);        
 })

I tried

 //response.setEncoding('utf8');
 //response.setEncoding('binary');

and new Buffer(response.body, 'ascii').toString('utf8') to read the body content but its not working.

how to read the body content properly as JSON ?

like image 721
Sarath Avatar asked Jan 27 '26 21:01

Sarath


1 Answers

This works using zlib.createGunzip() like this:

var http = require("http"),
    zlib = require("zlib");

var req = http.request(url, function (res) {

    // pipe the response into the gunzip to decompress
    var gunzip = zlib.createGunzip();
    res.pipe(gunzip);

    gunzip.on('data', function (data) {
        // decompression chunk ready, add it to the buffer
        buffer.push(data.toString());

    }).on("end", function () {
        // response and decompression complete, join the buffer and return
        callback(null, buffer.join(""));

    }).on("error", function (e) {
        callback(e);
    });
});

req.on('error', function (e) {
    callback(e);
});

req.end();
like image 85
Sarath Avatar answered Jan 29 '26 10:01

Sarath



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!