类:ClientRequest
类:ClientRequest
发起 HTTP/HTTPS 请求。
进程:主进程,Utility
此类未从 `'electron'` 模块导出。它仅作为 Electron API 中其他方法的返回值提供。
ClientRequest
实现了 Writable Stream 接口,因此是一个 EventEmitter。
new ClientRequest(options)
options
属性,例如 protocol
、host
、hostname
、port
和 path
,严格遵循 URL 模块中描述的 Node.js 模型。
例如,我们可以按如下方式创建对 'github.com' 的相同请求
const request = net.request({
method: 'GET',
protocol: 'https:',
hostname: 'github.com',
port: 443,
path: '/'
})
实例事件
事件:'response'
返回
response
IncomingMessage - 表示 HTTP 响应消息的对象。
事件:'login'
返回
authInfo
ObjectisProxy
booleanscheme
stringhost
stringport
Integerrealm
string
callback
Functionusername
string (可选)password
string (可选)
当认证代理要求用户凭据时触发。
期望使用用户凭据回调 callback
函数
username
stringpassword
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` 事件表示 `request` 或 `response` 对象上将不再触发任何事件。
事件:'redirect'
返回
statusCode
Integermethod
stringredirectUrl
stringresponseHeaders
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
Trailer
或Te
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 网络层后的下一个 tick 中异步调用。与 Node.js 实现相反,不保证在调用 callback
之前 chunk
内容已在网络上刷新。
将数据块添加到请求体。第一次写入操作可能会导致请求标头在网络上发出。第一次写入操作后,不允许添加或移除自定义标头。
request.end([chunk][, encoding][, callback])
chunk
(string | Buffer) (可选)encoding
string (可选)callback
Function (可选)
返回 this
。
发送请求数据的最后一个块。后续的写入或结束操作将不被允许。`finish` 事件在结束操作后立即触发。
request.abort()
取消正在进行的 HTTP 事务。如果请求已经触发 `close` 事件,中止操作将无效。否则,正在进行的事件将触发 `abort` 和 `close` 事件。此外,如果存在正在进行的响应对象,它将触发 `aborted` 事件。
request.followRedirect()
继续任何挂起的重定向。只能在 `'redirect'` 事件期间调用。
request.getUploadProgress()
返回 Object
active
boolean - 请求当前是否活跃。如果此值为 false,则不会设置其他属性started
boolean - 上传是否已开始。如果此值为 false,则current
和total
都将设置为 0。current
Integer - 目前已上传的字节数total
Integer - 此请求将上传的总字节数(字节)
可以将此方法与 POST
请求结合使用,以获取文件上传或其他数据传输的进度。