跳到主要内容

net

使用 Chromium 的原生网络库发出 HTTP/HTTPS 请求

进程:主进程, 实用进程

net 模块是一个用于发出 HTTP(S) 请求的客户端 API。 它类似于 Node.js 的 HTTPHTTPS 模块,但使用 Chromium 的原生网络库而不是 Node.js 实现,从而为 Web 代理提供更好的支持。它还支持检查网络状态。

以下是非详尽的列表,说明了你为什么可以考虑使用 net 模块而不是原生 Node.js 模块

  • 自动管理系统代理配置、支持 wpad 协议和代理 pac 配置文件。
  • 自动隧道传输 HTTPS 请求。
  • 支持使用基本、摘要、NTLM、Kerberos 或协商身份验证方案对代理进行身份验证。
  • 支持流量监控代理:用于访问控制和监控的类似 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()
})

只有在应用程序发出 ready 事件后才能使用 net API。在 ready 事件之前尝试使用该模块会引发错误。

方法

net 模块具有以下方法

net.request(options)

返回 ClientRequest

使用提供的 options 创建一个 ClientRequest 实例,这些选项直接转发到 ClientRequest 构造函数。 net.request 方法将根据 options 对象中指定的协议方案发出安全和不安全的 HTTP 请求。

net.fetch(input[, init])

返回 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()

有关更多详细信息,请参阅 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 string - 要解析的主机名。
  • options Object (可选)
    • queryType string (可选) - 请求的 DNS 查询类型。如果未指定,解析器将根据 IPv4/IPv6 设置选择 A 或 AAAA(或两者)。
      • A - 仅获取 A 记录
      • AAAA - 仅获取 AAAA 记录。
    • source string (可选) - 用于解析地址的源。 默认允许解析器选择合适的源。 仅影响对大型外部源的使用(例如,调用系统进行解析或使用 DNS)。 即使指定了源,结果仍然可以来自缓存,解析 “localhost” 或 IP 字面量等。以下值之一
      • any (默认) - 解析器将选择合适的源。结果可能来自 DNS、MulticastDNS、HOSTS 文件等。
      • system - 结果将仅从系统或操作系统检索,例如通过 getaddrinfo() 系统调用
      • dns - 结果将仅来自 DNS 查询
      • mdns - 结果将仅来自多播 DNS 查询
      • localOnly - 不会使用外部源。结果将仅来自快速本地源,无论源设置如何,这些本地源都可用,例如缓存、主机文件、IP 字面量解析等。
    • cacheUsage string (可选) - 指示可以使用哪些 DNS 缓存条目(如果有)来提供响应。 以下值之一
      • allowed (默认) - 如果非过时,结果可能来自主机缓存
      • staleAllowed - 结果可能来自主机缓存,即使过时(通过过期或网络更改)
      • disallowed - 结果将不会来自主机缓存。
    • secureDnsPolicy string (可选) - 控制此请求的解析器的安全 DNS 行为。 以下值之一
      • allow (默认)
      • disable

返回 Promise<ResolvedHost> - 解析为 host 的解析 IP 地址。

此方法将从默认会话解析主机。 要从另一个会话解析主机,请使用ses.resolveHost()

属性

net.online 只读

一个 boolean 属性。指示当前是否有互联网连接。

false 的返回值是一个很强的指示,表明用户无法连接到远程站点。但是,true 的返回值是不确定的;即使某些链接已启动,也无法确定特定连接尝试到特定远程站点是否会成功。