跳到主要内容

类: ClientRequest

类: ClientRequest

发起 HTTP/HTTPS 请求。

进程:主进程实用进程
此类并非从 'electron' 模块导出。 它仅作为 Electron API 中其他方法的返回值可用。

ClientRequest 实现了 Writable Stream 接口,因此是一个 EventEmitter

new ClientRequest(options)

  • options(对象 | 字符串) - 如果 options 是一个字符串,则将其解释为请求 URL。 如果它是一个对象,则预期通过以下属性完全指定 HTTP 请求
    • method string (可选) - HTTP 请求方法。 默认为 GET 方法。
    • url string (可选) - 请求 URL。 必须以绝对形式提供,并将协议方案指定为 http 或 https。
    • headers Record<string, string | string[]> (可选) - 要随请求发送的标头。
    • session Session (可选) - 与请求关联的 Session 实例。
    • partition string (可选) - 与请求关联的 partition 的名称。默认为空字符串。 session 选项取代 partition。因此,如果显式指定了 session,则会忽略 partition
    • credentials string (可选) - 可以是 includeomitsame-origin。是否随此请求发送 凭据。 如果设置为 include,将使用与请求关联的会话中的凭据。 如果设置为 omit,则不会随请求发送凭据(并且在出现 401 时不会触发 'login' 事件)。 如果设置为 same-origin,则还必须指定 origin。 这与同名的 fetch 选项的行为相匹配。如果未指定此选项,则将发送会话中的身份验证数据,并且不会发送 cookie(除非设置了 useSessionCookies)。
    • useSessionCookies boolean (可选) - 是否从此会话发送 cookie。 如果指定了 credentials,则此选项无效。默认为 false
    • protocol string (可选) - 可以是 http:https:。协议方案,形式为“scheme:”。默认为 'http:'。
    • host string (可选) - 服务器主机作为主机名和端口号 'hostname:port'.
    • hostname string (可选) - 服务器主机名。
    • port Integer (可选) - 服务器的监听端口号。
    • path string (可选) - 请求 URL 的路径部分。
    • redirect string (可选) - 可以是 followerrormanual。此请求的重定向模式。当模式为 error 时,任何重定向都将中止。当模式为 manual 时,除非在 redirect 事件期间同步调用 request.followRedirect,否则将取消重定向。默认为 follow
    • origin string (可选) - 请求的原始 URL。
    • referrerPolicy string (可选) - 可以是 ""、no-referrerno-referrer-when-downgradeoriginorigin-when-cross-originunsafe-urlsame-originstrict-originstrict-origin-when-cross-origin。默认为 strict-origin-when-cross-origin
    • cache string (可选) - 可以是 defaultno-storereloadno-cacheforce-cacheonly-if-cached

options 属性(例如 protocolhosthostnameportpath)严格遵循 URL 模块中所述的 Node.js 模型。

例如,我们可以创建以下与 “github.com” 相同的请求

const request = net.request({
method: 'GET',
protocol: 'https:',
hostname: 'github.com',
port: 443,
path: '/'
})

实例事件

事件:'response'

返回

事件:'login'

返回

  • authInfo 对象
    • isProxy boolean
    • scheme string
    • host string
    • port Integer
    • realm string
  • callback Function
    • username string (可选)
    • password string (可选)

当身份验证代理要求用户凭据时发出。

callback 函数应使用用户凭据回调

  • username string
  • password string
request.on('login', (authInfo, callback) => {
callback('username', 'password')
})

提供空凭据将取消请求并在响应对象上报告身份验证错误

request.on('response', (response) => {
console.log(`STATUS: ${response.statusCode}`)
response.on('error', (error) => {
console.log(`ERROR: ${JSON.stringify(error)}`)
})
})
request.on('login', (authInfo, callback) => {
callback()
})

事件:'finish'

刚好在 request 的最后一块数据写入到 request 对象之后发出。

事件:'abort'

request 被中止时发出。如果 request 已关闭,则不会触发 abort 事件。

事件:'error'

返回

  • error Error - 一个错误对象,提供有关失败的一些信息。

net 模块无法发出网络请求时发出。通常,当 request 对象发出 error 事件时,随后将出现 close 事件,并且不会提供任何响应对象。

事件:'close'

作为 HTTP 请求-响应事务中的最后一个事件发出。 close 事件表示在 requestresponse 对象上不会再发出任何事件。

事件:'redirect'

返回

  • statusCode Integer
  • method string
  • redirectUrl string
  • responseHeaders Record<string, string[]>

当服务器返回重定向响应时发出(例如,301 Moved Permanently)。调用 request.followRedirect 将继续重定向。 如果处理了此事件,则必须同步调用 request.followRedirect,否则将取消请求。

实例属性

request.chunkedEncoding

一个 boolean 值,指定请求是否将使用 HTTP 分块传输编码。默认为 false。该属性是可读写的,但只能在第一次写入操作之前设置,因为 HTTP 标头尚未放在线路上。在第一次写入后尝试设置 chunkedEncoding 属性将引发错误。

如果您需要发送大型请求正文,强烈建议使用分块编码,因为数据将以小块流式传输,而不是在 Electron 进程内存中进行内部缓冲。

实例方法

request.setHeader(name, value)

  • name string - 一个额外的 HTTP 标头名称。
  • value string - 一个额外的 HTTP 标头值。

添加额外的 HTTP 标头。标头名称将按原样发出,而不会转换为小写。它只能在第一次写入之前调用。在第一次写入后调用此方法将引发错误。如果传递的值不是 string,则将调用其 toString() 方法以获取最终值。

某些标头被限制为不被应用程序设置。这些标头在下面列出。有关受限标头的更多信息,请参阅 Chromium 的标头实用工具

  • Content-Length
  • Host
  • TrailerTe
  • Upgrade
  • Cookie2
  • Keep-Alive
  • Transfer-Encoding

此外,也不允许将 Connection 标头设置为值 upgrade

request.getHeader(name)

  • name string - 指定额外的请求头名称。

返回 string - 返回先前设置的额外请求头名称的值。

request.removeHeader(name)

  • name string - 指定额外的请求头名称。

删除先前设置的额外请求头名称。此方法只能在第一次写入之前调用。在第一次写入之后尝试调用它将会抛出错误。

request.write(chunk[, encoding][, callback])

  • chunk (string | Buffer) - 请求体数据的一个块。如果它是字符串,则使用指定的编码将其转换为 Buffer。
  • encoding string (可选) - 用于将字符串块转换为 Buffer 对象。默认为 'utf-8'。
  • callback Function (可选) - 在写入操作结束后调用。

callback 本质上是一个为了与 Node.js API 保持相似性而引入的虚拟函数。它在 chunk 内容被传递到 Chromium 网络层之后的下一个事件循环中异步调用。与 Node.js 实现不同,不保证在调用 callback 之前 chunk 的内容已被刷新到网络上。

向请求体添加数据块。第一次写入操作可能会导致请求头被发送到网络上。在第一次写入操作之后,不允许添加或删除自定义请求头。

request.end([chunk][, encoding][, callback])

  • chunk (string | Buffer) (可选)
  • encoding string (可选)
  • callback Function (可选)

返回 this

发送请求数据的最后一个块。之后不允许再进行写入或结束操作。在结束操作后立即触发 finish 事件。

request.abort()

取消正在进行的 HTTP 事务。如果请求已经触发了 close 事件,则中止操作将不起作用。否则,正在进行的事件将触发 abortclose 事件。此外,如果存在正在进行的响应对象,它将触发 aborted 事件。

request.followRedirect()

继续任何挂起的重定向。只能在 'redirect' 事件期间调用。

request.getUploadProgress()

返回 Object

  • active boolean - 请求当前是否处于活动状态。如果为 false,则不会设置其他属性
  • started boolean - 上传是否已开始。如果为 false,则 currenttotal 都将被设置为 0。
  • current Integer - 到目前为止已上传的字节数
  • total Integer - 此请求将要上传的字节数

你可以将此方法与 POST 请求结合使用,以获取文件上传或其他数据传输的进度。