6

私の人生のためにこれを理解することはできません。以下はリクエストモジュールを使用した実装ですが、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
});

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

4

2 に答える 2

11

コンテンツはgzipされています。とを使用requestzlibて、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

参考文献: gzip/deflate 圧縮による簡単な HTTPリクエスト

于 2013-02-10T01:20:55.757 に答える
6

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

request を使用しているため、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
});
于 2016-12-06T07:17:37.180 に答える