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(ClientRequestConstructorOptions | string) -ClientRequest构造函数的选项。
使用提供的 options 创建一个 ClientRequest 实例,这些 options 会直接转发给 ClientRequest 构造函数。net.request 方法会根据 options 对象中指定的协议方案,发起安全或不安全的 HTTP 请求。
net.fetch(input[, init])¶
inputstring | GlobalRequestinitRequestInit & { bypassCustomProtocolHandlers?: boolean }(可选)
返回 Promise<GlobalResponse> - 参见 Response。
使用 Chromium 的网络栈发送请求,其工作方式类似于渲染进程中的 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()。
有关更多详细信息,请参见 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 })
}
})
[!NOTE] 在工具进程中,不支持自定义协议。
net.isOnline()¶
返回 boolean - 当前是否有互联网连接。
返回值为 false 是一个相当强的指标,表明用户可能无法连接到远程站点。然而,返回值为 true 并不具有决定性;即使某些链路已连接,也无法确定针对特定远程站点的某次连接尝试是否会成功。
net.resolveHost(host, [options])¶
hoststring - 要解析的主机名。optionsObject(可选)queryTypestring(可选) - 请求的 DNS 查询类型。如果未指定,解析器将根据 IPv4/IPv6 设置选择 A 或 AAAA(或两者):A- 仅获取 A 记录AAAA- 仅获取 AAAA 记录。
sourcestring(可选) - 用于解析地址的来源。默认允许解析器选择适当的来源。仅影响大型外部来源的使用(例如调用系统进行解析或使用 DNS)。即使指定了来源,结果仍可能来自缓存、解析 "localhost" 或 IP 字面量等。以下值之一:any(默认) - 解析器将选择适当的来源。结果可能来自 DNS、MulticastDNS、HOSTS 文件等system- 结果仅从系统或操作系统获取,例如通过getaddrinfo()系统调用dns- 结果仅来自 DNS 查询mdns- 结果仅来自 Multicast DNS 查询localOnly- 不会使用外部来源。结果仅来自无论来源设置如何都可用的快速本地来源,例如缓存、hosts 文件、IP 字面量解析等。
cacheUsagestring(可选) - 指示可以使用哪些 DNS 缓存条目(如果有)来提供响应。以下值之一:allowed(默认) - 如果未失效,结果可能来自主机缓存staleAllowed- 即使已失效(因过期或网络变化),结果也可能来自主机缓存disallowed- 结果不会来自主机缓存。
secureDnsPolicystring(可选) - 控制解析器针对此请求的 Secure DNS 行为。以下值之一:allow(默认)disable
返回 Promise<ResolvedHost> - 解析为 host 的已解析 IP 地址。
此方法将从默认会话解析主机。 要从其他会话解析主机,请使用 ses.resolveHost()。
属性¶
net.online 只读¶
一个 boolean 属性。表示当前是否有互联网连接。
返回值为 false 是一个相当强的指标,表明用户将无法连接到远程站点。但是,返回值为 true 并不具有决定性;即使某些链路已启用,也无法确定对某个特定远程站点的特定连接尝试是否会成功。
net.WebSocket¶
[!NOTE] 此属性仅在主进程中可用。
一个指向 WebSocket 类的 typeof WebSocket 引用,可用于从主进程通过 Chromium 的网络栈创建 WHATWG 兼容 的 WebSocket 连接。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron