2013-02-10 21 views
6

Tôi không thể tìm ra điều này cho cuộc sống của tôi. Dưới đây là triển khai với mô-đun request, nhưng tôi cũng đã thử với mô-đun node-XMLHttpRequest không có kết quả.Sự cố mã hóa với yêu cầu JSON từ API StackOverflow

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

Có vẻ là vấn đề mã hóa, nhưng tôi đã sử dụng cùng mã chính xác (với các đối tượng XHR gốc) trong trình duyệt và hoạt động không có vấn đề gì. Tôi đang làm gì sai?

Trả lời

10

Nội dung là gzipped. Bạn có thể sử dụng requestzlib để giải nén một phản ứng đã phát khỏi 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 

(Tham khảo: https://stackoverflow.com/a/14739453/112196)

+0

Vâng, đó có ý nghĩa. Cảm ơn bạn! –

4

Trong khi câu trả lời pero là đúng, có một cách đơn giản hơn để làm điều này.

Vì bạn đang sử dụng yêu cầu, bạn có thể cũng chỉ cần thêm gzip: true cờ:

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, headers: {'accept-encoding': 'gzip'}, gzip: true }, function(error, response, body) { 
    console.log(body); // not gibberish 
}); 
Các vấn đề liên quan