2013-02-10 9 views
6

私の人生の間、これを理解することはできません。以下はrequestモジュールを実装したものですが、node-XMLHttpRequestモジュールを使用しても問題ありません。StackOverflow APIからJSONを要求するときのエンコーディングの問題

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

エンコードの問題になるようですが、私は、ブラウザで(ネイティブXHRオブジェクトと)まったく同じコードを使用してきましたし、それは問題なく動作します。私は間違って何をしていますか?

答えて

10

gzippedです。あなたはAPIからストリーミングされた応答を解凍するrequestzlibを使用することができます。

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

+0

はい、それは理にかなっています。ありがとうございました! –

4

ペロの答えは、これを行うための簡単な方法があります、正しいですが。

あなたが要求を使用しているので、あなたはまた、単に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=stackoverflow'; 

request.get({ url: url, headers: {'accept-encoding': 'gzip'}, gzip: true }, function(error, response, body) { 
    console.log(body); // not gibberish 
}); 
関連する問題