跳到主要內容

net

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

處理程序:主處理程序工具程式處理程序

net 模組是用於發出 HTTP(S) 請求的用戶端 API。它類似於 Node.js 的 HTTPHTTPS 模組,但使用 Chromium 的原生網路程式庫而不是 Node.js 實作,從而提供更好的 Web 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 的 fetch() 不同,後者使用 Node.js 的 HTTP 堆疊。

範例

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 並不確定;即使某些連結已啟動,也無法確定特定連線嘗試到特定遠端網站是否會成功。