跳到主要內容

類別:ClientRequest

類別:ClientRequest

發出 HTTP/HTTPS 請求。

程序:主程序, 工具程序
此類別未從 'electron' 模組匯出。它僅作為 Electron API 中其他方法的回傳值提供。

ClientRequest 實作了 Writable Stream 介面,因此是一個 EventEmitter

new ClientRequest(options)

  • options (物件 | 字串) - 如果 options 是字串,則會將其解讀為請求 URL。如果它是一個物件,則預期透過以下屬性完整指定 HTTP 請求
    • method 字串 (選用) - HTTP 請求方法。預設為 GET 方法。
    • url 字串 (選用) - 請求 URL。必須以絕對形式提供,並指定 http 或 https 協定方案。
    • headers Record<string, string | string[]> (選用) - 隨請求傳送的標頭。
    • session Session (選用) - 與請求關聯的 Session 實例。
    • partition 字串 (選用) - 與請求關聯的 partition 名稱。預設為空字串。session 選項取代 partition。因此,如果明確指定了 session,則會忽略 partition
    • credentials 字串 (選用) - 可以是 includeomitsame-origin。是否隨此請求傳送憑證。如果設定為 include,則將使用與請求關聯的 session 中的憑證。如果設定為 omit,則不會隨請求傳送憑證(並且在 401 情況下不會觸發 'login' 事件)。如果設定為 same-origin,則也必須指定 origin。這符合同名 fetch 選項的行為。如果未指定此選項,則將傳送來自 session 的驗證資料,並且不會傳送 Cookie(除非設定了 useSessionCookies)。
    • useSessionCookies boolean (選用) - 是否從提供的 session 隨此請求傳送 Cookie。如果指定了 credentials,則此選項無效。預設值為 false
    • protocol 字串 (選用) - 可以是 http:https:。協定方案,格式為 'scheme:'。預設為 'http:'。
    • host 字串 (選用) - 伺服器 host,以主機名稱和埠號的串連形式提供 'hostname:port'.
    • hostname 字串 (選用) - 伺服器主機名稱。
    • port Integer (選用) - 伺服器的監聽埠號。
    • path 字串 (選用) - 請求 URL 的路徑部分。
    • redirect 字串 (選用) - 可以是 followerrormanual。此請求的重新導向模式。當模式為 error 時,任何重新導向都將中止。當模式為 manual 時,除非在 redirect 事件期間同步呼叫 request.followRedirect,否則重新導向將被取消。預設為 follow
    • origin 字串 (選用) - 請求的 origin URL。
    • referrerPolicy 字串 (選用) - 可以是 ""、no-referrerno-referrer-when-downgradeoriginorigin-when-cross-originunsafe-urlsame-originstrict-originstrict-origin-when-cross-origin。預設為 strict-origin-when-cross-origin
    • cache 字串 (選用) - 可以是 defaultno-storereloadno-cacheforce-cacheonly-if-cached

options 屬性(例如 protocolhosthostnameportpath)嚴格遵循 Node.js 模型,如 URL 模組中所述。

例如,我們可以如下建立對 'github.com' 的相同請求

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

實例事件

事件:'response'

回傳

事件:'login'

回傳

  • authInfo 物件
    • isProxy boolean
    • scheme 字串
    • host 字串
    • port Integer
    • realm 字串
  • callback 函數
    • username 字串 (選用)
    • password 字串 (選用)

當驗證 Proxy 要求使用者憑證時發出。

預期使用使用者憑證回呼 callback 函數

  • username 字串
  • password 字串
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 錯誤 - 提供有關失敗資訊的錯誤物件。

net 模組無法發出網路請求時發出。通常,當 request 物件發出 error 事件時,隨後會跟著 close 事件,並且不會提供回應物件。

事件:'close'

作為 HTTP 請求-回應交易中的最後一個事件發出。close 事件表示在 requestresponse 物件上將不再發出任何事件。

事件:'redirect'

回傳

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

當伺服器傳回重新導向回應 (例如 301 Moved Permanently) 時發出。呼叫 request.followRedirect 將繼續進行重新導向。如果處理了此事件,則必須同步呼叫 request.followRedirect,否則請求將被取消。

實例屬性

request.chunkedEncoding

一個 boolean,指定請求是否將使用 HTTP 分塊傳輸編碼。預設為 false。該屬性是可讀寫的,但是只能在第一次寫入操作之前設定,因為 HTTP 標頭尚未放在網路上。嘗試在第一次寫入後設定 chunkedEncoding 屬性將會拋出錯誤。

如果您需要傳送大型請求 body,強烈建議使用分塊編碼,因為資料將以小區塊串流傳輸,而不是在 Electron 程序記憶體內部緩衝。

實例方法

request.setHeader(name, value)

  • name 字串 - 額外的 HTTP 標頭名稱。
  • value 字串 - 額外的 HTTP 標頭值。

新增額外的 HTTP 標頭。標頭名稱將按原樣發出,不進行小寫轉換。它只能在第一次寫入之前呼叫。在第一次寫入後呼叫此方法將會拋出錯誤。如果傳遞的值不是 string,則將呼叫其 toString() 方法以取得最終值。

某些標頭被限制應用程式設定。這些標頭列在下方。有關受限標頭的更多資訊,請參閱 Chromium 的標頭工具

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

此外,將 Connection 標頭設定為值 upgrade 也是不允許的。

request.getHeader(name)

  • name 字串 - 指定額外的標頭名稱。

回傳 string - 先前設定的額外標頭名稱的值。

request.removeHeader(name)

  • name 字串 - 指定額外的標頭名稱。

移除先前設定的額外標頭名稱。此方法只能在第一次寫入之前呼叫。嘗試在第一次寫入後呼叫它將會拋出錯誤。

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

  • chunk (字串 | Buffer) - 請求 body 資料的區塊。如果它是字串,則會使用指定的編碼將其轉換為 Buffer。
  • encoding 字串 (選用) - 用於將字串區塊轉換為 Buffer 物件。預設為 'utf-8'。
  • callback 函數 (選用) - 在寫入操作結束後呼叫。

callback 本質上是一個虛設函數,引入的目的是為了與 Node.js API 保持相似性。在 chunk 內容傳遞到 Chromium 網路層後,它會在下一個 tick 中非同步呼叫。與 Node.js 實作相反,不能保證在呼叫 callback 之前,chunk 內容已刷新到網路上。

將資料區塊新增到請求 body。第一次寫入操作可能會導致在網路上發出請求標頭。在第一次寫入操作之後,不允許新增或移除自訂標頭。

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

  • chunk (字串 | Buffer) (選用)
  • encoding 字串 (選用)
  • callback 函數 (選用)

回傳 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 請求使用此方法,以取得檔案上傳或其他資料傳輸的進度。