Проблема с кодировкой при запросе JSON из API Stackru
Я не могу понять это для моей жизни. Ниже приведена реализация с модулем запроса, но я также попытался с модулем 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=stackru';
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
});
Кажется, это проблема кодирования, но я использовал точно такой же код (с собственными объектами XHR) в браузере, и он работает без проблем. Что я делаю неправильно?
2 ответа
Решение
Содержание распаковано. Ты можешь использовать 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=stackru';
request({ url: url, headers: {'accept-encoding': 'gzip'}})
.pipe(zlib.createGunzip())
.pipe(process.stdout); // not gibberish
(Ссылка: /questions/33150380/nodejs-prostyie-http-zaprosyi-so-szhatiem-gzipdeflate/33150395#33150395)
Хотя ответ Перо правильный, есть более простой способ сделать это.
Поскольку вы используете запрос, вы также можете просто добавить gzip: true
флаг:
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=stackru';
request.get({ url: url, headers: {'accept-encoding': 'gzip'}, gzip: true }, function(error, response, body) {
console.log(body); // not gibberish
});