メインコンテンツへ飛ぶ

net

Chromium のネイティブのネットワークライブラリを使用して、 HTTP/HTTPS リクエストを発行します。

プロセス: Main, Utility

net モジュールは HTTP(S) リクエストを発行するクライアントサイド API です。 これは Node.js の HTTP および HTTPS モジュールに似ていますが、Node.js 実装の代わりに Chromium のネイティブネットワークライブラリを使用し、ウェブプロキシをより効果的にサポートします。 また、ネットワーク状況の確認にも対応しています。

以下は、完全に網羅しているわけではありませんが、ネイティブ Node.js モジュールの代わりに net モジュールを使用することを検討する理由のリストです。

  • システムプロキシ設定の自動管理、WPAD プロトコルとプロキシの PAC 設定ファイルのサポート。
  • HTTPS リクエストの自動トンネリング。
  • Basic、Digest、NTLM、Kerberosを使用したプロキシの認証、またはネゴシエート認証スキームをサポート。
  • アクセス制御および監視に使用される、Fiddler のようなトラフィック監視プロキシのサポート。

API コンポーネント (クラス、メソッド、プロパティ、イベント名など) は、Node.js で使用されているものと同様です。

使用例:

const { app } = require('electron')
app.whenReady().then(() => {
const { net } = require('electron')
const request = net.request('https://github.com')
request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
console.log(`HEADERS: ${JSON.stringify(response.headers)}`)
response.on('data', (chunk) => {
console.log(`BODY: ${chunk}`)
})
response.on('end', () => {
console.log('No more data in response.')
})
})
request.end()
})

net API は、アプリケーションが ready イベントを発生させた後でのみ使用できます。 ready イベントの前にモジュールを使用しようとすると、エラーがスローされます。

メソッド

net モジュールには以下のメソッドがあります。

net.request(options)

戻り値 ClientRequest

ClientRequest コンストラクタに直接転送される options を使用してClientRequest インスタンスを作成します。 net.request メソッドは、options オブジェクト内の指定されたプロトコルにしたがって、セキュアとインセキュア両方の HTTP リクエストを発行するために使用されます。

net.fetch(input[, init])

戻り地 Promise<GlobalResponse> - Response をご参照ください。

Chrome のネットワークスタックを使って、レンダラーでの fetch() の動作と同様にリクエストを送信します。 これは Node.js の HTTP スタックを使用する Node の fetch() とは異なります。

サンプル:

async function example () {
const response = await net.fetch('https://my.app')
if (response.ok) {
const body = await response.json()
// ... 結果を使いましょう。
}
}

このメソッドは デフォルトのセッション からリクエストを発行します。 別のセッションから fetch リクエストを送るには、ses.fetch() を利用してください。

fetch() についての詳細は MDN のドキュメントをご参照ください。

制限事項:

  • net.fetch()data:blob: スキームをサポートしていません。
  • integrity オプションの値は無視されます。
  • 返された Response オブジェクトの .type.url の値は不正確です。

デフォルトでは、net.fetch で行われたリクエストは カスタムプロトコル だけでなく file: に対しても許可され、webRequest ハンドラーが存在すればトリガされます。 RequestInit で非標準の bypassCustomProtocolHandlers オプションが設定されている場合、このリクエストに対してカスタムのプロトコルハンドラは呼び出されません。 これにより、干渉されるリクエストを組み込みハンドラへ転送できます。 webRequest ハンドラはカスタムプロトコルをバイパスしても引き続きトリガされます。

protocol.handle('https', (req) => {
if (req.url === 'https://my-app.com') {
return new Response('<body>my app</body>')
} else {
return net.fetch(req, { bypassCustomProtocolHandlers: true })
}
})

注意: ユーティリティプロセス のカスタムプロトコルはサポートしていません。

net.isOnline()

戻り値 boolean - 現在インターネットに接続しているかどうか。

戻り値が false の場合、ユーザーがリモートサイトに接続できないことをかなり強く示しています。 しかし、true の戻り値は決定的ではありません。いくつかのリンクが見当たらなくても、特定リモートサイトへの特定の接続試行が成功するかどうかは不確かです。

net.resolveHost(host, [options])

  • host string - 解決するホスト名。
  • options Object (任意)
    • queryType string (任意) - 要求される DNS クエリタイプ。 未指定の場合、リゾルバは IPv4/IPv6 の設定に基づいて A または AAAAA (あるいはその両方) を選択します。
      • A - A レコードのみを取得します。
      • AAAA - AAAA レコードのみを取得します。
    • source string (任意) - アドレス解決に使用するソースです。 省略すると、リゾルバが適切なソースを選択できるようにします。 大規模な外部ソースを使用するときのみ影響します (解決または DNS の利用のためにシステムを呼び出すなど)。 ソースが指定された場合でも、「localhost」や IP リテラルの解決のようなものの結果はキャッシュから来ることがあります。 以下の値のいずれかです。
      • any (既定) - リゾルバが適切なソースを選択します。 DNS、MulticastDNS、HOSTS ファイルなどから結果が得られることもあります。
      • system - getaddrinfo() システムコール経由などで、システムや OS のみで結果を取得します。
      • dns - DNS クエリのみで結果を取得します。
      • mdns - マルチチャスト DNS クエリのみで結果を取得します。
      • localOnly - 外部ソースを使用しません。 結果は、ソース設定に関係なく利用可能な高速ローカルソースからのみ取得します。例えば、キャッシュ、hosts ファイル、IP リテラル解決などです。
    • cacheUsage string (任意) - 応答の提供に利用できる DNS キャッシュのエントリがある場合に、そのエントリの取り扱いを示します。 以下の値のいずれかです。
      • allowed (既定) - ホストのキャッシュが古くなければ、そこから結果を取得します。
      • staleAllowed - ホストのキャッシュが (有効期限切れやネットワークの変更で) 古い場合でも、そこから結果を取得します。
      • disallowed - ホストのキャッシュからは結果を取得しません。
    • secureDnsPolicy string (任意) - このリクエストに対するリゾルバのセキュア DNS の動作を制御します。 以下の値のいずれかです。
      • allow (既定)
      • disable

戻り値 Promise<ResolvedHost> - host について解決された IP アドレスによって解決されます。

このメソッドは デフォルトのセッション からホストを解決します。 別のセッションからホストを解決するには、ses.resolveHost() を使用してください。

プロパティ

net.online 読み出し専用

boolean 型のプロパティです。 これは現在インターネットに接続しているかどうかです。

戻り値が false の場合、ユーザーがリモートサイトに接続できないことをかなり強く示しています。 しかし、true の戻り値は決定的ではありません。いくつかのリンクが見当たらなくても、特定リモートサイトへの特定の接続試行が成功するかどうかは不確かです。