请求堆栈溢出 API 返回奇怪的响应



我使用以下代码来调用堆栈溢出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));
});

}

此代码将响应作为奇怪的字符返回:

res{"statusCode":200,"body":"u001f�bu0000u0000u0000u0000u0000u0004u0000��{��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Ո���Ŷ��Cju0016��b�I�u001e��u001b�����iY��u001aw�"Oҕ}H��ѝ\Vզ�ru0002����m�cu001b�����:�bsJu0010f���u0012��Mu001aW�¾w�߭tu0001u001anu0016&-7+����)�_�Oz�}��u0005�\����*p�������u0016�*���p�Yu0006�mu0007e-�?:��ou0016i���rW��m�W��Y<�v�u0010�۬��˛E3�;�nu0016e�u0017����e���*}J����u0015u001c��0,B���".l��#����e}�-*u0015��u0018��gӉ�A'u0013u001c���u0014��ou001f3�undefined:1
[object Object]

相同的代码适用于不同的 API 调用。有人可以建议出了什么问题吗?

Stackoverflow 使用压缩来响应您的请求。我使用以下方法得到了正确的响应:

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)  
   });

它与接受编码标头有关。

将其显式设置为"null"或"*"应该可以解决问题。

我的第一个答案是你应该谷歌JS承诺。我的第一个猜测是它一定是承诺的对象。如果是镜像,由于JS异步性质,必须先承诺它。如果不是导致问题的承诺,请确保它是"UTF-8"支持的语言。

相关内容

  • 没有找到相关文章

最新更新