web-dev-qa-db-ja.com

Node.jsのClientRequestでプロキシ(fiddlerなど)を使用できますか

Node.jsは、プロキシ(Fiddlerなど)を認識し、すべてのClientRequestをプロキシ経由でルーティングするように設定できますか?

Windowsでnodeを使用していて、ブラウザーでJavaScriptにFiddlerを使用するのと同じようにhttpリクエストをデバッグしたいと思います。

はっきり言っておきますが、私はプロキシを作成したり、サーバーが受信したプロキシリクエストを作成したりしていません。 http.request()からのリクエストをプロキシ経由でルーティングしたい。 Fiddlerを使用して、ブラウザーで要求を実行している場合と同様に、要求と応答の両方を検査したいと思います。

46
chuckj

Fiddlerを介してクライアント要求をルーティングするには、optionsオブジェクトを次のように変更します(例:http.requestを作成する直前):

options.path = 'http://' + options.Host + ':' + options.port + options.path;
options.headers.Host = options.Host;
options.Host = '127.0.0.1';
options.port = 8888;

myReq = http.request(options, function (result) {
    ...
});
24
Peter Cools

以下は気の利いたものだと思います。 request モジュールは、Windows環境変数からプロキシ情報を読み取ります。

Windowsコマンドプロンプトで次のように入力すると、シェルの有効期間が設定されます。このシェルからノードアプリを実行するだけです。

set https_proxy=http://127.0.0.1:8888 
set http_proxy=http://127.0.0.1:8888
set NODE_TLS_REJECT_UNAUTHORIZED=0
53
Naraen

ノードからの発信要求を監視したい場合は、 request モジュールを使用できます

そして、proxyプロパティをオプションに設定するだけです

request.post('http://204.145.74.56:3003/test', {
headers :{ 'content-type' : 'application/octet-stream'}, 
'body' : buf ,
 proxy: 'http://127.0.0.1:8888'
}, function() {
   //callback
});

8888は、fiddlerのデフォルトのポートです。

7
doron aviguy

私自身の質問に答える: https://github.com/joyent/node/issues/1514によると、答えはノーです、ただし、プロキシをサポートするrequestモジュール http://search.npmjs.org/#/request を使用できます。

5
chuckj
process.env.https_proxy = "http://127.0.0.1:8888";
process.env.http_proxy = "http://127.0.0.1:8888";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
4
Warlock

一般的なケースでプロキシを構成する場合、他の答えは正しいです:ノードとして使用しているライブラリに対して手動で構成する必要があります 意図的に すぐにシステムのプロキシ設定を無視します。

ただし、Node.js用のフィドラーのようなHTTPデバッグツールを単に探している場合は、オープンソースプロジェクトでこれを行うために(ビルトインノードサポートを使用して)HTTP Toolkit。それにより

  • ワンクリックでアプリからターミナルを開く
  • そのターミナルから任意のノードのCLI /サーバー/スクリプトを起動します
  • 送信するすべてのHTTPまたはHTTPSリクエストは自動的にプロキシされるため、すべてを表示して書き換えることができます。コードの変更やnpmパッケージは必要ありません。

これは、一連のNPM、ノード、およびブラウザトラフィックをデバッグするデモです。

Demo screenshot

内部的には、これが機能する方法は、追加の JSスクリプト を開始済みNodeプロセスに注入し、require()にフックしてプロキシ設定を自動的に再構成することです。あなたのために、グローバル設定を使用しないすべてのモジュールについて。

0
Tim Perry