我无法一生解决这个问题。下面是request模块的实现,但是我也尝试过node-XMLHttpRequest模块无济于事。
var request = require('request');
var url = 'http://api.stackexchange.com/2.1/questions?pagesize=100&fromdate=1356998400&todate=1359676800&order=desc&min=0&sort=votes&tagged=javascript&site=stackoverflow';
request.get({ url: url }, function(error, response, body) {
if (error || response.statusCode !== 200) {
console.log('There was a problem with the request');
return;
}
console.log(body); // outputs gibberish characters like �
console.log(body.toString()); // also outputs gibberish
});
似乎是编码问题,但是我在浏览器中使用了完全相同的代码(带有 native XHR对象),并且可以正常工作。我究竟做错了什么?
最佳答案
内容是gzipped。您可以使用request
和 zlib
解压缩来自API的流式响应:
var request = require('request')
,zlib = require('zlib');
var url = 'http://api.stackexchange.com/2.1/questions?pagesize=100&fromdate=1356998400&todate=1359676800&order=desc&min=0&sort=votes&tagged=javascript&site=stackoverflow';
request({ url: url, headers: {'accept-encoding': 'gzip'}})
.pipe(zlib.createGunzip())
.pipe(process.stdout); // not gibberish
(引用:https://stackoverflow.com/a/14739453/112196)