web-dev-qa-db-ja.com

Node.jsで外部HTTPリクエストを行う方法

質問はかなり簡単です。 Node.jsサーバーをプロキシとして使用して、HTTPクエリをログに記録し、認証し、バックエンドHTTPサーバーに転送します(PUT、GET、およびDELETE要求)。

そのためにどのライブラリを使用する必要がありますか?見つからないのではないかと心配しています。

82
Pierre

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

node-http-proxyexpress を組み合わせます。

node-http-proxyは、RoutingProxyを介してnode.js Webサーバー内のプロキシをサポートします(別のhttpサーバー内のプロキシ要求を参照してください)。

カスタムサーバーロジック内で、エクスプレスを使用して認証を行うことができます。 例についてはこちらの認証サンプル を参照してください。

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

7
hross

組み込みのhttpモジュールを使用して、http.request()を実行できます。

ただし、APIを簡素化する場合は、 superagent などのモジュールを使用できます

5
evilcelery

node-http-proxyは、上記の@hrossによって提案された素晴らしいソリューションです。 nodeを使用する上でデッドセットになっていない場合、 NGINX を使用して同じことを行います。 nodeで本当にうまく機能します。たとえば、SSLリクエストを処理してからノードに転送するために使用します。キャッシュおよび転送ルートも処理できます。わーい!

1
Jamund Ferguson

これを行うには、node.js httpモジュールを使用できます。 Node.js HTTP でドキュメントを確認できます。

他のHTTPサーバーにもクエリ文字列を渡す必要があります。 ServerRequest.url にあるはずです。

これらの情報を取得したら、バックエンドHTTPサーバーに渡し、http.request()で提供するオプションをポートに渡すことができます。

0
momo