メインコンテンツにスキップ

net

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

プロセス: メインユーティリティ

net モジュールは、HTTP(S)リクエストを発行するためのクライアントサイドAPIです。Node.jsのHTTPおよびHTTPSモジュールに似ていますが、Node.jsの実装ではなくChromiumのネイティブネットワークライブラリを使用するため、Webプロキシのサポートが向上しています。また、ネットワークステータスの確認もサポートしています。

以下は、ネイティブNode.jsモジュールではなくnetモジュールを使用する理由の網羅的ではないリストです。

  • システムプロキシ設定の自動管理、wpadプロトコルとプロキシpac設定ファイルのサポート。
  • HTTPSリクエストの自動トンネリング。
  • 基本、ダイジェスト、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()
// ... use the result.
}
}

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

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

制限事項

  • 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またはAAAA(または両方)を選択します
      • A - Aレコードのみを取得します
      • AAAA - AAAAレコードのみを取得します。
    • source string (オプション) - 解決されたアドレスに使用するソース。デフォルトでは、リゾルバが適切なソースを選択できます。大きな外部ソースの使用(たとえば、解決のためにシステムを呼び出すか、DNSを使用する)にのみ影響します。ソースが指定されていても、結果はキャッシュ、 "localhost"またはIPリテラルの解決などから得られる可能性があります。次の値のいずれか
      • any (デフォルト) - リゾルバは適切なソースを選択します。結果は、DNS、MulticastDNS、HOSTSファイルなどから得られる可能性があります
      • system - 結果は、たとえばgetaddrinfo()システムコールを介して、システムまたはOSからのみ取得されます
      • dns - 結果はDNSクエリからのみ得られます
      • mdns - 結果はマルチキャストDNSクエリからのみ得られます
      • localOnly - 外部ソースは使用されません。結果は、ソース設定に関係なく使用可能な高速ローカルソース(キャッシュ、ホストファイル、IPリテラル解決など)からのみ得られます。
    • cacheUsage string (オプション) - レスポンスを提供するために使用できるDNSキャッシュエントリ(存在する場合)を示します。次の値のいずれか
      • allowed (デフォルト) - 結果は、非ステールの場合、ホストキャッシュから得られる可能性があります
      • staleAllowed - 結果は、ステール(有効期限またはネットワークの変更による)であっても、ホストキャッシュから得られる可能性があります
      • disallowed - 結果はホストキャッシュから得られません。
    • secureDnsPolicy string (オプション) - このリクエストのリゾルバのセキュアDNS動作を制御します。次の値のいずれか
      • allow (デフォルト)
      • disable

Promise<ResolvedHost>を返します - hostの解決されたIPアドレスで解決されます。

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

プロパティ

net.online 読み取り専用

booleanプロパティ。現在インターネットに接続されているかどうか。

falseの戻り値は、ユーザーがリモートサイトに接続できないことを示すかなり強力な指標です。ただし、戻り値trueは決定的ではありません。一部のリンクが稼働していても、特定のリモートサイトへの特定の接続試行が成功するかどうかは不明です。