ElectronでブラウザのHTTPプロキシ設定を利用する
Electronのアプリで、Web APIの呼び出しなどのためにHTTPリクエストを発行すると、外部サービスにHTTPプロキシ経由での接続のみを許している社内ネットワーク環境下では、何もしないとネットワークエラーになってしまいます。
これを回避するには、HTTPリクエストの送信時にHTTPプロキシ情報を設定する必要があります。もしaxiosなどを使っているのであればリクエストのオプションにproxy
を指定してあげることでこの指定が可能です。
const res = await axios.request({
method: 'GET',
url: 'https://api.example.com/v1/resource.json',
proxy: {
host: 'proxy.intranet.examle.org',
port: 8000,
},
});
しかし、そもそもそのHTTPプロキシの情報をどこからとってくればいいの?という問題があります。
もちろんユーザにプロキシ設定などの環境情報を入力させるのも一つの手ですが、エンドユーザに配布するときに無用な設定を強いるのはできるだけ避けたいところです。
ユーザのPC上のOSには、すでにHTTPプロキシの接続設定は保持されているはずです。現にChromeなどのブラウザはその情報を読み取って利用しています。なので、開発したElectronアプリでもそのようにしたいところです。
今回、ElectronのSessionを使うことで、その設定を流用することを試みました。
以下のようにしてデフォルトのsessionオブジェクトからresolveProxy()
を呼び出して、任意のURLに対して必要になるプロキシ設定の情報を読み取り可能です。
const { app, session } = require('electron');
app.on('ready', () => {
session.defaultSession.resolveProxy('https://api.example.com', (proxyInfo) => {
console.log(proxyInfo); // => "PROXY proxy.intranet.examle.org:8000"
});
});
ただし、こちらの方法では認証を必要とするプロキシサーバについては対応ができない模様です(返却されるプロキシ情報の文字列に認証情報が含まれない)。
引き続き方法について探っていきたいところです。
Author And Source
この問題について(ElectronでブラウザのHTTPプロキシ設定を利用する), 我々は、より多くの情報をここで見つけました https://qiita.com/stomita/items/b59972edafb1cf3357f0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .