CodeMonkey
CodeMonkey

Reputation: 2295

request to Stack Overflow API returning weird response

I am using the following code to call the Stack Overflow API:

var request = require('request');
var url = 'http://api.stackexchange.com/2.2/search?order=desc&sort=activity&tagged=node.js&intitle=node.js&site=stackoverflow';
request({
    headers: {
        'Accept': 'application/json; charset=utf-8',
        'User-Agent': 'RandomHeader'
    },
    uri: url,
    method: 'GET'
}, function(err, res, body) {
    console.log("response.statusCode" + res.statusCode);
    console.log("response.headers" + JSON.stringify(res.headers));
    console.log("res" + JSON.stringify(res));
    console.log("resParse" + JSON.parse(res));
});

}

This code returns the response as weird chars :

res{"statusCode":200,"body":"\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0004\u0000��{��H���\n�I�]M���̬U�5ݳ7=�3�ک�mݝN��L�t��\u0005\\\u001e�h��E��q�]����\\�\u0011�ɏxe��\"���\\���o�J?�\u001f���o�jq�X�����<���A?ݸv6Z���\u0012~F�N���v�?7�|��bq�ۢ��mՈ���Ŷ��Cj\u0016��b�I�\u001e��\u001b�����iY��\u001aw�\"Oҕ}H��ѝ\\Vզ�\r\u0002����m�c\u001b�����:�\bsJ\u0010f���\u0012��M\u001aW�¾w�߭t\u0001\u001an\u0016&-7+����)�_�Oz�}��\u0005�\\����*p�������\u0016�*���p�Y\u0006�m\u0007e-�?:��o\u0016i���rW��m�W��Y<�v�\u0010�۬��˛E3�;�n\u0016e�\u0017����e���*}J����\u0015\u001c��0,B���\".l��#����e}�-*\u0015��\u0018��gӉ�A'\u0013\u001c���\u0014��o\u001f3�undefined:1
[object Object]

Same code works for a different API call. Can someone suggest what's going wrong?

Upvotes: 2

Views: 377

Answers (3)

Alex MAN
Alex MAN

Reputation: 61

It has to do with the Accept-Encoding header.

Setting it explicitly to 'null' or '*' should solve the issue.

Upvotes: 0

George
George

Reputation: 120

Stackoverflow uses compression to respond to your request. I've got the correct response using the following:

var request = require('request');
var url = 'http://api.stackexchange.com/2.2/search?order=desc&sort=activity&tagged=node.js&intitle=node.js&site=stackoverflow';
request({
headers: {
    'Accept': 'application/json; charset=utf-8',
    'User-Agent': 'RandomHeader' 
         },
     uri: url,
     method: 'GET',
     gzip: true
         },
  function(err, res, body) {
     console.log("response.statusCode" + res.statusCode);
     console.log('server encoded the data as: ' + (res.headers['content-encoding'] || 'identity'))
     console.log('the decoded data is: ' + body)  
   });

Upvotes: 2

DevBear15
DevBear15

Reputation: 219

My first answer is you should google JS Promise. My first guess is it must be promisified object. If it is an image, because of JS asynchronous nature, you must promisify it first. If it is not the promise, that is causing the issue, make sure that it is "UTF-8" supported languages.

Upvotes: -1

Related Questions