我使用以下代码调用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));
});
}
以下代码将响应返回为奇怪的字符:
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]
相同的代码可以用于不同的API调用。有人能指出哪里出了问题吗?
3条答案
按热度按时间piv4azn71#
Stackoverflow使用compression来响应您的请求。我已经使用以下代码得到了正确的响应:
hc8w905p2#
它与Accept-Encoding头有关。
将其显式设置为“null”或“*”应该可以解决此问题。
8fq7wneg3#
我的第一个答案是你应该google JS Promise。我的第一个猜测是它一定是promised对象。如果它是一个图像,由于JS异步的性质,你必须先promised它。如果它不是promised,那就是导致这个问题,确保它是“UTF-8”支持的语言。