54

HTTP/HTTPS 要求を簡単に送信し、gzip/deflate 圧縮応答を Cookie と共に処理するための最良の方法を見つけようとしています。

私が見つけた最高のものは、圧縮以外のすべてを処理するhttps://github.com/mikeal/requestでした。私が求めるすべてを実行するモジュールまたはメソッドはありますか?

そうでない場合、何らかの方法で request と zlib を組み合わせることができますか? zlib と を組み合わせようとしましhttp.ServerRequestたが、惨めに失敗しました。

4

6 に答える 6

112

最近これに遭遇した人のために、要求ライブラリはすぐに使用できる gzip 解凍をサポートしています。次のように使用します。

request(
    { method: 'GET'
    , uri: 'http://www.google.com'
    , gzip: true
    }
  , function (error, response, body) {
      // body is the decompressed response body
      console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity'))
      console.log('the decoded data is: ' + body)
    }
  )

github readme からhttps://github.com/request/request

gzip - true の場合、Accept-Encoding ヘッダーを追加してサーバーから圧縮されたコンテンツ エンコーディングを要求し (まだ存在しない場合)、応答でサポートされているコンテンツ エンコーディングをデコードします。注: 応答コンテンツの自動デコードは、要求によって返された本文データ (要求ストリームを介して、およびコールバック関数に渡されたもの) に対して実行されますが、変更されていない http である応答ストリーム (応答イベントから入手可能) に対しては実行されません。圧縮データを含む可能性がある .IncomingMessage オブジェクト。以下の例を参照してください。

于 2015-02-18T12:07:38.007 に答える
82

注: 2019 年現在、リクエストには gzip 解凍が組み込まれています。以下の方法を使用して手動でリクエストを解凍することもできます。

requestzlibストリームを単純に組み合わせることができます。

ポート 8000 でリッスンしているサーバーがあると仮定した例を次に示します。

var request = require('request'), zlib = require('zlib');

var headers = {
    'Accept-Encoding': 'gzip'
};

request({url:'http://localhost:8000/', 'headers': headers})
    .pipe(zlib.createGunzip()) // unzip
    .pipe(process.stdout); // do whatever you want with the stream
于 2013-02-06T21:47:29.117 に答える
9

これは、応答をガンジップする実際の例です

function gunzipJSON(response){

    var gunzip = zlib.createGunzip();
    var json = "";

    gunzip.on('data', function(data){
        json += data.toString();
    });

    gunzip.on('end', function(){
        parseJSON(json);
    });

    response.pipe(gunzip);
}

完全なコード: https://gist.github.com/0xPr0xy/5002984

于 2013-02-21T07:53:15.510 に答える
5

http://nodejs.org/docs/v0.6.0/api/zlib.html#examplesで例を確認してください。

zlib がノードに組み込まれるようになりました。

于 2012-02-18T00:35:54.903 に答える