net
使用 Chromium 的原生网络库发起 HTTP/HTTPS 请求
进程: 主进程, Utility 进程
net
模块是一个用于发起 HTTP(S) 请求的客户端 API。它类似于 Node.js 的 HTTP 和 HTTPS 模块,但使用的是 Chromium 的原生网络库,而非 Node.js 的实现,因此对 Web 代理有更好的支持。它还支持检查网络状态。
以下是非详尽列举的一些您可能考虑使用 net
模块而非原生 Node.js 模块的原因:
- 自动管理系统代理配置,支持 wpad 协议和 proxy pac 配置文件。
- HTTPS 请求的自动隧道。
- 支持使用 basic, digest, NTLM, Kerberos 或 negotiate 认证方案的代理身份验证。
- 支持流量监控代理:用于访问控制和监控的类似 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)
使用提供的 options
创建一个 ClientRequest
实例,这些选项会直接转发给 ClientRequest
构造函数。net.request
方法会根据 options
对象中指定的协议方案发起安全和非安全的 HTTP 请求。
net.fetch(input[, init])
input
string | 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.
}
}
此方法将从默认会话发起请求。要从其他会话发送 fetch
请求,请使用 ses.fetch()
。
有关更多详细信息,请参见 fetch()
的 MDN 文档。
限制
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 })
}
})
注意:在 Utility 进程中不支持自定义协议。
net.isOnline()
返回 boolean
- 当前是否有互联网连接。
返回值为 false
是一个相当强烈的指示,表明用户无法连接到远程站点。然而,返回值为 true
则不确定;即使某些链接已建立,也不能确定对特定远程站点的特定连接尝试是否会成功。
net.resolveHost(host, [options])
host
string - 要解析的主机名。
返回 Promise<ResolvedHost>
- 解析为 host
的已解析 IP 地址。
此方法将从默认会话解析主机。要从其他会话解析主机,请使用 ses.resolveHost()
。
属性
net.online
只读
一个 boolean
属性。表示当前是否有互联网连接。
返回值为 false
是一个相当强烈的指示,表明用户无法连接到远程站点。然而,返回值为 true
则不确定;即使某些链接已建立,也不能确定对特定远程站点的特定连接尝试是否会成功。