net
使用 Chromium 的原生网络库发出 HTTP/HTTPS 请求
net 模块是用于发出 HTTP(S) 请求的客户端 API。它与 Node.js 的 HTTP 和 HTTPS 模块类似,但它使用 Chromium 的原生网络库而不是 Node.js 的实现,提供了更好的 Web 代理支持。它还支持检查网络状态。
以下是您可能考虑使用 net 模块而非原生 Node.js 模块的一些原因(非详尽列表)
- 自动管理系统代理配置,支持 wpad 协议和代理 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])
inputstring | GlobalRequestinitRequestInit & { bypassCustomProtocolHandlers?: boolean } (optional)
返回 Promise<GlobalResponse> - 请参阅 Response。
发送请求,类似于渲染器中的 fetch() 工作方式,使用 Chrome 的网络堆栈。这与 Node.js 的 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()。
有关更多详细信息,请参阅 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])
hoststring - 要解析的主机名。
返回 Promise<ResolvedHost> - 解析 host 的已解析 IP 地址。
此方法将从 默认会话 解析主机。要从其他会话解析主机,请使用 ses.resolveHost()。
属性
net.online Readonly
一个 boolean 属性。当前是否有互联网连接。
返回值为 false 是一个强烈的指示,表明用户将无法连接到远程站点。但是,返回值为 true 并不确定;即使某个链接已连接,也无法确定与特定远程站点的特定连接尝试是否会成功。