类: ClientRequest
类: ClientRequest
发起 HTTP/HTTPS 请求。
进程: 主进程, 工具进程
此类不是从 '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
对象isProxy
booleanscheme
stringhost
stringport
Integerrealm
string
callback
函数username
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
函数 (可选) - 在写入操作结束后调用。
callback
本质上是一个虚拟函数,其目的是为了与 Node.js API 保持相似性。 它在 chunk
内容已传递到 Chromium 网络层之后的下一个 tick 中异步调用。 与 Node.js 实现相反,不保证在调用 callback
之前已将 chunk
内容刷新到网络上。
向请求正文添加数据块。 第一次写入操作可能会导致在网络上发出请求标头。 在第一次写入操作之后,不允许添加或删除自定义标头。
request.end([chunk][, encoding][, callback])
chunk
(string | Buffer) (可选)encoding
string (可选)callback
函数 (可选)
返回 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
请求结合使用,以获取文件上传或其他数据传输的进度。