跳到主要內容

Request

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

如果請求在某些時候失敗,則會發出 Page.RequestFailed 事件,而不是 'requestfinished' 事件(並且可能取代 'response' 事件)。

注意

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

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


方法

AllHeadersAsync

新增於:v1.15 request.AllHeadersAsync

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

用法

await Request.AllHeadersAsync();

回傳


失敗

在 v1.9 之前新增 request.Failure

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

用法

記錄所有失敗請求的範例

page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};

回傳


框架

在 v1.9 之前新增 request.Frame

傳回啟動此請求的 Frame

用法

var frameUrl = request.Frame.Url;

回傳

詳細資訊

請注意,在某些情況下,框架可能不可用,此方法會擲回例外。

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

以下範例處理所有情況


標頭值 Async

新增於:v1.15 request.HeaderValueAsync

回傳與名稱相符的標頭值。名稱不區分大小寫。

用法

await Request.HeaderValueAsync(name);

參數

回傳


標頭

在 v1.9 之前新增 request.Headers

一個物件,包含請求 HTTP 標頭。標頭名稱為小寫。請注意,此方法不會回傳與安全性相關的標頭,包括與 Cookie 相關的標頭。您可以使用 Request.AllHeadersAsync() 來取得包含 cookie 資訊的完整標頭清單。

用法

Request.Headers

回傳


標頭陣列 Async

新增於:v1.15 request.HeadersArrayAsync

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

用法

await Request.HeadersArrayAsync();

回傳


是否為導航請求

在 v1.9 之前新增 request.IsNavigationRequest

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

某些導航請求是在建立對應框架之前發出的,因此沒有可用的 Request.Frame

用法

Request.IsNavigationRequest

回傳


方法

在 v1.9 之前新增 request.Method

請求的方法 (GET、POST 等等)

用法

Request.Method

回傳


貼文資料

在 v1.9 之前新增 request.PostData

請求的 post body,若有的話。

用法

Request.PostData

回傳


貼文資料緩衝區

在 v1.9 之前新增 request.PostDataBuffer

請求的 post body 以二進制形式,若有的話。

用法

Request.PostDataBuffer

回傳


貼文資料 JSON

新增於:v1.12 request.PostDataJSON

傳回已解析的請求 post body,適用於 form-urlencoded 和 JSON 作為後備方案 (若有的話)。

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

用法

Request.PostDataJSON

回傳


重新導向來源

在 v1.9 之前新增 request.RedirectedFrom

伺服器將請求重新導向至此請求的來源請求 (若有的話)。

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

用法

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

var response = await page.GotoAsync("http://www.microsoft.com");
Console.WriteLine(response.Request.RedirectedFrom?.Url); // http://www.microsoft.com

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

var response = await page.GotoAsync("https://www.google.com");
Console.WriteLine(response.Request.RedirectedFrom?.Url); // null

回傳


重新導向目標

在 v1.9 之前新增 request.RedirectedTo

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

用法

此方法與 Request.RedirectedFrom 相反。

Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True

回傳


資源類型

在 v1.9 之前新增 request.ResourceType

包含請求的資源類型,如同渲染引擎所感知。ResourceType 將會是以下其中之一:documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

用法

Request.ResourceType

回傳


回應 Async

在 v1.9 之前新增 request.ResponseAsync

傳回相符的 Response 物件,若因錯誤而未收到回應,則傳回 null

用法

await Request.ResponseAsync();

回傳


大小 Async

新增於:v1.15 request.SizesAsync

傳回指定請求的資源大小資訊。

用法

await Request.SizesAsync();

回傳

  • 大小#
    • 請求本文大小 int

      請求 body (POST 資料 payload) 的大小,以位元組為單位。若沒有 body 則設定為 0。

    • 請求標頭大小 int

      從 HTTP 請求訊息開始到 (包含) body 前的雙 CRLF 的總位元組數。

    • 回應本文大小 int

      收到的回應 body (已編碼) 的大小,以位元組為單位。

    • 回應標頭大小 int

      從 HTTP 回應訊息開始到 (包含) body 前的雙 CRLF 的總位元組數。


計時

在 v1.9 之前新增 request.Timing

傳回指定請求的資源計時資訊。大部分的計時值會在收到回應時變成可用,responseEnd 會在請求完成時變成可用。在 Resource Timing API 找到更多資訊。

用法

var request = await page.RunAndWaitForRequestFinishedAsync(async () =>
{
await page.GotoAsync("https://www.microsoft.com");
});
Console.WriteLine(request.Timing.ResponseEnd);

回傳

  • 計時#
    • 開始時間 [float]

      請求開始時間,以毫秒為單位,自 1970 年 1 月 1 日 00:00:00 UTC 起算

    • 網域查詢開始 [float]

      瀏覽器開始資源的網域名稱查詢之前的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 網域查詢結束 [float]

      瀏覽器開始資源的網域名稱查詢之後的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 連線開始 [float]

      在使用者代理程式開始建立與伺服器的連線以擷取資源之前的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 安全連線開始 [float]

      瀏覽器開始交握程序以保護目前連線安全之前的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 連線結束 [float]

      在使用者代理程式開始建立與伺服器的連線以擷取資源之前的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 請求開始 [float]

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

    • 回應開始 [float]

      瀏覽器從伺服器、快取或本機資源收到回應的第一個位元組之後的時間點。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。

    • 回應結束 [float]

      瀏覽器收到資源的最後一個位元組之後,或在傳輸連線關閉之前的時間點,以先到者為準。數值以毫秒為單位,相對於 startTime,若不可用則為 -1。


網址

在 v1.9 之前新增 request.Url

請求的 URL。

用法

Request.Url

回傳