跳到主要內容

Request

每當頁面發送網路資源請求時,Page 會發出以下事件序列

如果請求在某個時間點失敗,則會發出 page.on('requestfailed') 事件,而不是 'requestfinished' 事件 (也可能而不是 'response' 事件)。

注意

HTTP 錯誤回應,例如 404 或 503,從 HTTP 的角度來看仍然是成功的回應,因此請求將以 'requestfinished' 事件完成。

如果請求收到 'redirect' 回應,則請求會以 requestfinished 事件成功完成,並向重新導向的 URL 發出新的請求。


方法

allHeaders

新增於:v1.15 request.allHeaders

包含與此請求相關聯的所有請求 HTTP 標頭的物件。標頭名稱為小寫。

用法

await request.allHeaders();

返回


failure

早於 v1.9 版本新增 request.failure

除非此請求失敗 (如 requestfailed 事件所報告),否則此方法返回 null

用法

記錄所有失敗請求的範例

page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});

返回

  • null | Object#
    • errorText string

      人類可讀的錯誤訊息,例如 'net::ERR_FAILED'


frame

早於 v1.9 版本新增 request.frame

返回啟動此請求的 Frame

用法

const frameUrl = request.frame().url();

返回

詳細資訊

請注意,在某些情況下,Frame 可能不可用,此方法將會拋出錯誤。

  • 當請求源自 Service Worker 時。您可以使用 request.serviceWorker() 來檢查。
  • 當導航請求在建立對應的 Frame 之前發出時。您可以使用 request.isNavigationRequest() 來檢查。

以下是如何處理所有情況的範例

if (request.serviceWorker())
console.log(`request ${request.url()} from a service worker`);
else if (request.isNavigationRequest())
console.log(`request ${request.url()} is a navigation request`);
else
console.log(`request ${request.url()} from a frame ${request.frame().url()}`);

headerValue

新增於:v1.15 request.headerValue

返回與名稱匹配的標頭值。名稱不區分大小寫。

用法

await request.headerValue(name);

引數

返回


headers

早於 v1.9 版本新增 request.headers

包含請求 HTTP 標頭的物件。標頭名稱為小寫。請注意,此方法不會返回與安全性相關的標頭,包括與 cookie 相關的標頭。您可以使用 request.allHeaders() 來取得包含 cookie 資訊的完整標頭列表。

用法

request.headers();

返回


headersArray

新增於:v1.15 request.headersArray

包含與此請求相關聯的所有請求 HTTP 標頭的陣列。與 request.allHeaders() 不同,標頭名稱不是小寫。具有多個條目的標頭 (例如 Set-Cookie) 會在陣列中出現多次。

用法

await request.headersArray();

返回


isNavigationRequest

早於 v1.9 版本新增 request.isNavigationRequest

此請求是否正在驅動 Frame 的導航。

某些導航請求是在建立對應的 Frame 之前發出的,因此沒有可用的 request.frame()

用法

request.isNavigationRequest();

返回


method

早於 v1.9 版本新增 request.method

請求的方法 (GET、POST 等)

用法

request.method();

返回


postData

早於 v1.9 版本新增 request.postData

請求的 post body (如果有的話)。

用法

request.postData();

返回


postDataBuffer

早於 v1.9 版本新增 request.postDataBuffer

二進制格式的請求 post body (如果有的話)。

用法

request.postDataBuffer();

返回


postDataJSON

早於 v1.9 版本新增 request.postDataJSON

返回已解析的請求 body,用於 form-urlencoded 和 JSON (如果有的話,作為後備方案)。

當回應為 application/x-www-form-urlencoded 時,將返回值的鍵/值物件。否則,它將被解析為 JSON。

用法

request.postDataJSON();

返回


redirectedFrom

早於 v1.9 版本新增 request.redirectedFrom

伺服器將請求重新導向到此請求 (如果有的話)。

當伺服器以重新導向回應時,Playwright 會建立新的 Request 物件。這兩個請求通過 redirectedFrom()redirectedTo() 方法連接。當發生多次伺服器重新導向時,可以通過重複調用 redirectedFrom() 來建構整個重新導向鏈。

用法

例如,如果網站 http://example.com 重新導向到 https://example.com

const response = await page.goto('http://example.com');
console.log(response.request().redirectedFrom().url()); // 'http://example.com'

如果網站 https://google.com 沒有重新導向

const response = await page.goto('https://google.com');
console.log(response.request().redirectedFrom()); // null

返回


redirectedTo

早於 v1.9 版本新增 request.redirectedTo

如果伺服器以重新導向回應,則瀏覽器發出的新請求。

用法

此方法與 request.redirectedFrom() 相反

console.log(request.redirectedFrom().redirectedTo() === request); // true

返回


resourceType

早於 v1.9 版本新增 request.resourceType

包含渲染引擎感知的請求資源類型。ResourceType 將是以下之一:documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

用法

request.resourceType();

返回


response

早於 v1.9 版本新增 request.response

返回匹配的 Response 物件,如果由於錯誤而未收到回應,則返回 null

用法

await request.response();

返回


serviceWorker

新增於:v1.24 request.serviceWorker

正在執行請求的 Service Worker

用法

request.serviceWorker();

返回

詳細資訊

此方法僅適用於 Chromium。在其他瀏覽器中使用時可以安全調用,但它將始終為 null

源自 Service Worker 的請求沒有可用的 request.frame()


sizes

新增於:v1.15 request.sizes

返回給定請求的資源大小資訊。

用法

await request.sizes();

返回

  • Promise<Object>#
    • requestBodySize number

      請求 body 的大小 (POST 數據負載),以字節為單位。如果沒有 body,則設定為 0。

    • requestHeadersSize number

      從 HTTP 請求訊息的開頭到 body 之前的雙 CRLF (包括雙 CRLF) 的總字節數。

    • responseBodySize number

      接收到的回應 body 的大小 (已編碼),以字節為單位。

    • responseHeadersSize number

      從 HTTP 回應訊息的開頭到 body 之前的雙 CRLF (包括雙 CRLF) 的總字節數。


timing

早於 v1.9 版本新增 request.timing

返回給定請求的資源計時資訊。大多數計時值在回應後可用,responseEnd 在請求完成時可用。在 Resource Timing API 中查找更多資訊。

用法

const requestFinishedPromise = page.waitForEvent('requestfinished');
await page.goto('http://example.com');
const request = await requestFinishedPromise;
console.log(request.timing());

返回

  • Object#
    • startTime number

      自 1970 年 1 月 1 日 00:00:00 UTC 以來經過的請求開始時間 (以毫秒為單位)

    • domainLookupStart number

      瀏覽器開始查找資源的域名之前的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • domainLookupEnd number

      瀏覽器開始查找資源的域名之後的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • connectStart number

      用戶代理開始建立與伺服器的連接以檢索資源之前的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • secureConnectionStart number

      瀏覽器開始握手過程以保護當前連接之前的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • connectEnd number

      用戶代理開始建立與伺服器的連接以檢索資源之前的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • requestStart number

      瀏覽器開始從伺服器、快取或本地資源請求資源之前的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • responseStart number

      瀏覽器從伺服器、快取或本地資源接收到回應的第一個字節之後的時間。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。

    • responseEnd number

      瀏覽器接收到資源的最後一個字節之後的時間,或在傳輸連接關閉之前 (以先到者為準)。該值以相對於 startTime 的毫秒為單位給出,如果不可用則為 -1。


url

早於 v1.9 版本新增 request.url

請求的 URL。

用法

request.url();

返回