跳至主要內容

net

使用 Chromium 的原生網路函式庫發出 HTTP/HTTPS 請求

進程:工具

net 模組是一個用於發出 HTTP(S) 請求的客戶端 API。它類似於 Node.js 的 HTTPHTTPS 模組,但使用 Chromium 的原生網路函式庫而不是 Node.js 的實作,提供對網路 Proxy 更好的支援。它也支援檢查網路狀態。

以下是您可能考慮使用 net 模組而不是原生 Node.js 模組的一些原因(非詳盡列表):

  • 自動管理系統 Proxy 設定、支援 wpad 協議和 Proxy pac 設定檔。
  • 自動建立 HTTPS 請求的通道。
  • 支援使用基本、摘要、NTLM、Kerberos 或協商驗證方案來驗證 Proxy。
  • 支援流量監控 Proxy:用於存取控制和監控的 Fiddler 類似 Proxy。

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

使用提供的 options 建立 ClientRequest 實例,這些選項會直接轉發到 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.
}
}

此方法會從預設 Session發出請求。若要從另一個 Session 傳送 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 字串 - 要解析的主機名稱。
  • options 物件 (選用)
    • queryType 字串 (選用) - 請求的 DNS 查詢類型。如果未指定,解析器將根據 IPv4/IPv6 設定選擇 A 或 AAAA(或兩者)。
      • A - 僅擷取 A 記錄
      • AAAA - 僅擷取 AAAA 記錄。
    • source 字串 (選用) - 用於解析位址的來源。預設允許解析器選擇適當的來源。僅影響使用大型外部來源(例如,呼叫系統進行解析或使用 DNS)。即使指定了來源,結果仍然可以來自快取、解析「localhost」或 IP 字面值等。以下值之一:
      • any (預設) - 解析器將選擇適當的來源。結果可能來自 DNS、MulticastDNS、HOSTS 檔案等。
      • system - 結果僅會從系統或作業系統中擷取,例如透過 getaddrinfo() 系統呼叫。
      • dns - 結果僅來自 DNS 查詢。
      • mdns - 結果僅來自 Multicast DNS 查詢。
      • localOnly - 不會使用任何外部來源。結果僅來自快速的本機來源,無論來源設定如何,這些來源都可用,例如快取、hosts 檔案、IP 字面值解析等。
    • cacheUsage 字串 (選用) - 指示可以使用哪些 DNS 快取項目(如果有的話)來提供回應。以下值之一:
      • allowed (預設) - 如果快取未過期,則結果可能來自主機快取。
      • staleAllowed - 即使快取過期(由於過期或網路變更),結果也可能來自主機快取。
      • disallowed - 結果將不會來自主機快取。
    • secureDnsPolicy 字串 (選用) - 控制此請求的解析器安全 DNS 行為。以下值之一:
      • allow (預設)
      • disable

回傳 Promise<ResolvedHost> - 使用 host 的已解析 IP 位址解析。

此方法將從預設 Session解析主機。若要從另一個 Session 解析主機,請使用 ses.resolveHost()

屬性

net.online 唯讀

一個 boolean 屬性。是否目前有網路連線。

回傳值為 false 表示使用者將無法連線到遠端網站。但是,回傳值為 true 並不能確定;即使某些連結已啟動,也不能確定嘗試連線到特定遠端網站是否會成功。