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