2011-11-01 21 views
75

質問はかなり簡単です。私は、バックエンドのHTTPサーバ(PUT、GET、DELETE要求)にHTTPクエリを記録し、認証し、転送するために、Node.jsサーバをプロキシとして使用したいと考えています。Node.jsで外部HTTPリクエストを作成する方法

この目的のために使用するライブラリは何ですか?私は見つけることができないのではないかと恐れている。

答えて

121

NodeJS標準モジュールとしてhttp.requestをサポートしています。 http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http'); 

var options = { 
    host: 'example.com', 
    port: 80, 
    path: '/foo.html' 
}; 

http.get(options, function(resp){ 
    resp.on('data', function(chunk){ 
    //do something with chunk 
    }); 
}).on("error", function(e){ 
    console.log("Got error: " + e.message); 
}); 
+10

'resp.setEncoding( 'utf8');'(または使用しているエンコーディング)を追加してutf8文字列としてデータを取得することをお勧めします。私が正しく理解していれば、Bufferオブジェクトを取得し、マルチバイト文字が2つのチャンクに分割されているとマルチバイト文字に問題が発生する可能性があります。 (ただしばらくの間、関連する問題をデバッグしました) – Touko

+7

私は実際に 'request' npmモジュールをもっと使い始めました。 – chovy

0

node.js httpモジュールを使用してこれを行うことができます。資料はNode.js HTTPで確認できます。

他のHTTPサーバーにもクエリ文字列を渡す必要があります。それはServerRequest.urlにあるはずです。あなたがそれらの情報を持っていたら

、あなたは私がnode-http-proxyexpressを組み合わせたでしょうhttp.request()

7

に提供しますオプションで、バックエンドのHTTPサーバーとポートに渡すことができます。

node-http-proxyは、RoutingProxy(例:の別のhttpサーバ内のプロキシ要求を参照)経由でnode.js Webサーバー内のプロキシをサポートします。

カスタムサーバーロジック内では、expressを使用して認証を行うことができます。 auth sample here for an exampleを参照してください。

これらの2つの例を組み合わせると、必要なものが得られます。

4

内蔵のhttpモジュールを使用してhttp.request()を実行できます。あなたは、このようなsuperagent

+3

多く正気APIを助けます。私は低レベルのAPIしか提供していないノードを非難するのではなく、データの断片を処理することはちょっと面倒です。 –

1

ノード-HTTPプロキシとしてモジュールを使用することができるAPIを簡素化したい場合は、上記の@hrossによって提案されたよう

は、しかし優れたソリューションです。ノードを使用してデッドセットしていない場合は、同じことを行うにはNGINXを使用します。それはノードで本当にうまく動作します。たとえば、SSL要求をノードに転送する前に処理します。また、キャッシュおよび転送ルートも処理できます。わーい!

7

私は最近REQUESTIFYを発見しました。

Getリクエスト:JSONに

requestify.get('http://example.com').then(function(response) { 
    // Get the response body 
    response.getBody(); 
}); 

投稿:

requestify.post('http://example.com', { 
     hello: 'world' 
    }) 
     .then(function(response) { 
      // Get the response body (JSON parsed or jQuery object for XMLs) 
      response.getBody(); 

      // Get the raw response body 
      response.body; 
     }); 

希望これは確かに

関連する問題