Node.js スクリプトからの HTTP 通信時にプロキシを通すには request が楽チン
社内開発のため、プロキシ制限がある中で Node.js スクリプトを書いていた。Node.js スクリプトから外部サーバに HTTP 通信して GET とかしたいのだが、プロキシの通し方が分からなかった。調べてみても、Node.js サーバを構築した時の設定の話ばかりで、ちょっとした HTTP GET をやりたい時の解説が少なかった。
色々探し回った結果、request という npm パッケージを使って HTTP 通信するのが一番楽そうだった。
request の使い方
適当な作業ディレクトリで $ npm init -y
して package.json
が置いてある前提で。
まずは request モジュールをインストールする。
$ npm install -S request
次に、スクリプトを以下のように書く。
const request = require('request');
request.post({
// 何かユーザ一覧を取得するような API へのアクセス
url: 'https://my-api-server.com/api/users',
// メソッド指定 (未指定時のデフォルトは GET)
method: 'GET',
// プロキシ URL を指定する
proxy: 'http://my-proxy.com/',
// 以降は任意なサンプル
headers: {
'X-My-Token': 'HTTP Header も指定可能'
},
body {
'name': 'POST や PUT 時のリクエストボディが付与できる'
},
form: {
'myMessage': 'application/x-www-form-urlencoded なフォーム送信とかも出来る'
}
}, (error, res, body) => {
if(error) {
// エラー時
}
// 処理成功時
console.log(body);
});
こんな Node.js スクリプトを、main.js
といった名前で保存しておき、
$ node main.js
などと叩いて実行すれば、ちゃんと http://my-proxy.com/
プロキシを経由したアクセスができるようになっている。
http
モジュールを使って HTTP GET とかするよりオプションが書きやすいので、request オススメ。
プロキシを通すために試したけどダメだったこと
.npmrc
に proxy
および https-proxy
を設定して、その状態で $ node main.js
のように実行しても、プロキシ設定は上手く行っていないようだった。
また、~/.bash_profile
などで、export https_proxy=http://my-proxy.com/
のように設定しておいても反映されなかった。http_proxy
・HTTP_PROXY
・https_proxy
・HTTPS_PROXY
と大文字・小文字で4パターン設定したがダメ。
tunnel という npm パッケージを使って http
モジュールのエージェントにするやり方は自分の環境だと上手く行かなかった。