net
使用 Chromium 的原生網路函式庫發出 HTTP/HTTPS 請求
net
模組是一個用於發出 HTTP(S) 請求的客戶端 API。它類似於 Node.js 的 HTTP 和 HTTPS 模組,但使用 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)
使用提供的 options
建立 ClientRequest
實例,這些選項會直接轉發到 ClientRequest
建構子。net.request
方法會根據 options
物件中指定的協定方案,用於發出安全和不安全的 HTTP 請求。
net.fetch(input[, init])
input
字串 | GlobalRequestinit
RequestInit & { bypassCustomProtocolHandlers?: boolean } (選用)
回傳 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
字串 - 要解析的主機名稱。
回傳 Promise<ResolvedHost> - 使用 host
的已解析 IP 位址解析。
此方法將從預設 Session解析主機。若要從另一個 Session 解析主機,請使用 ses.resolveHost()。
屬性
net.online
唯讀
一個 boolean
屬性。是否目前有網路連線。
回傳值為 false
表示使用者將無法連線到遠端網站。但是,回傳值為 true
並不能確定;即使某些連結已啟動,也不能確定嘗試連線到特定遠端網站是否會成功。