認証が必要なプロキシ経由でリクエストを送信する方法をメモ。
Rendererプロセス側での通信については、Electronで認証付きプロキシの認証情報をユーザーに入力してもらう方法 - Qiitaで分かりやすく書かれていました。
大まかな流れは上記リンク先と同じです。
- HTTPリクエストの送信
-
login
イベントを拾って認証画面を表示 - 入力情報を受け取り
callback(username, password)
- レスポンスを受け取る
Electronではバージョン1.4.5からnet
モジュールが追加されました。
Node.jsのhttp
モジュールではなく、Electronのnet
モジュールを使用する利点として、次のことが挙げられています。
- Automatic management of system proxy configuration, support of the wpad protocol and proxy pac configuration files.
- Automatic tunneling of HTTPS requests.
- Support for authenticating proxies using basic, digest, NTLM, Kerberos or negotiate authentication schemes.
- Support for traffic monitoring proxies: Fiddler-like proxies used for access control and monitoring.
要は、プロキシまわりの整備がされているということのようです。
公式のAPIリファレンスを見れば使い方はわかるかと思いますが、簡単に紹介しておきます。
HTTPリクエストの送信
APIリファレンスにサンプルコードも載っているので詳細は割愛しますが、
const request = net.request(options) // リクエストの生成
request.end() // リクエストの送信
という形でリクエストを送ります。
引数options
には次のようなものを含むObjectを渡します。
(直接URLを渡すこともできます。)
-
method
:HTTPリクエストのメソッド。デフォルトはGET。 -
url
:リクエストURL。プロトコル(http/httpsなど)から書く。 -
session
:リクエストと関連しているSessionのインスタンス。 -
partition
:リクエストと関連しているパーティション名。デフォルトは空。session
オプションが指定されている場合は、無視される。 -
protocol
: プロトコル。scheme:
の形で書く。デフォルトはhttp:
。 -
host
:サーバのホスト。ホスト名とポートをhostname:port
の形で書く。 -
hostname
:サーバのホスト名。 -
port
:サーバのポート番号。 -
path
:リクエストURLのパス部分。
login
イベントを拾って認証画面を表示
送信で生成したインスタンスでイベントを拾います。
request.on('login', (authInfo, callback) => {
// 認証画面を表示させる処理
// callbackはグローバルな変数に渡しておく
})
入力情報を受け取りcallback(username, password)
そのままですが、グローバル変数に渡しておいたcallbackに入力で受け取ったユーザ名とパスワードを渡して、認証を完了させます。
レスポンスを受け取る
リクエストに対するレスポンスはresponse
イベントを拾って受け取ることができます。
request.on('response', (response) => {
// 以下レスポンスボディを表示するサンプル
let body = ''
response.on('data', (chunk) => {
body += chunk
})
response.on('end', () => {
console.log(body)
})
})
他にもいろいろなイベントがあるので、詳細はAPIリファレンスのClientRequestを見てください。
このnetモジュールにたどり着くまで、古い情報ばかりがヒットして少し苦労しました。
Electronは頻繁に更新されているので、まめにAPIリファレンス見ると良さそうですね。