LoginSignup
15
12

More than 5 years have passed since last update.

ElectronのMainプロセスでHTTPリクエスト(認証が必要なプロキシ経由)

Posted at

認証が必要なプロキシ経由でリクエストを送信する方法をメモ。

Rendererプロセス側での通信については、Electronで認証付きプロキシの認証情報をユーザーに入力してもらう方法 - Qiitaで分かりやすく書かれていました。
大まかな流れは上記リンク先と同じです。

  1. HTTPリクエストの送信
  2. loginイベントを拾って認証画面を表示
  3. 入力情報を受け取りcallback(username, password)
  4. レスポンスを受け取る

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リファレンス見ると良さそうですね。

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12