Request
每當頁面傳送網路資源請求時,Page 就會發出以下事件序列
- Page.Request,當頁面發出請求時發出。
- Page.Response,當收到請求的回應狀態和標頭時發出。
- Page.RequestFinished,當回應本文下載完成且請求完成時發出。
如果請求在某些時候失敗,則會發出 Page.RequestFailed 事件,而不是 'requestfinished'
事件(並且可能取代 'response' 事件)。
從 HTTP 的角度來看,HTTP 錯誤回應(例如 404 或 503)仍然是成功的回應,因此請求將以 'requestfinished'
事件完成。
如果請求收到 'redirect' 回應,則請求會以 requestfinished
事件成功完成,並且會向重新導向的 URL 發出新請求。
方法
AllHeadersAsync
新增於:v1.15一個物件,包含與此請求相關聯的所有請求 HTTP 標頭。標頭名稱為小寫。
用法
await Request.AllHeadersAsync();
回傳
失敗
在 v1.9 之前新增除非此請求失敗(如 requestfailed
事件所報告),否則此方法會回傳 null
。
用法
記錄所有失敗請求的範例
page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};
回傳
框架
在 v1.9 之前新增傳回啟動此請求的 Frame。
用法
var frameUrl = request.Frame.Url;
回傳
詳細資訊
請注意,在某些情況下,框架可能不可用,此方法會擲回例外。
- 當請求源自 Service Worker 時。您可以使用
request.serviceWorker()
來檢查。 - 當導航請求在建立對應框架之前發出時。您可以使用 Request.IsNavigationRequest 來檢查。
以下範例處理所有情況
標頭值 Async
新增於:v1.15回傳與名稱相符的標頭值。名稱不區分大小寫。
用法
await Request.HeaderValueAsync(name);
參數
回傳
標頭
在 v1.9 之前新增一個物件,包含請求 HTTP 標頭。標頭名稱為小寫。請注意,此方法不會回傳與安全性相關的標頭,包括與 Cookie 相關的標頭。您可以使用 Request.AllHeadersAsync() 來取得包含 cookie
資訊的完整標頭清單。
用法
Request.Headers
回傳
標頭陣列 Async
新增於:v1.15一個陣列,包含與此請求相關聯的所有請求 HTTP 標頭。與 Request.AllHeadersAsync() 不同,標頭名稱「不是」小寫。具有多個條目的標頭(例如 Set-Cookie
)會在陣列中多次出現。
用法
await Request.HeadersArrayAsync();
回傳
- IEnumerable<
HttpHeader
>#
是否為導航請求
在 v1.9 之前新增此請求是否正在驅動 frame 的導航。
某些導航請求是在建立對應框架之前發出的,因此沒有可用的 Request.Frame。
用法
Request.IsNavigationRequest
回傳
方法
在 v1.9 之前新增請求的方法 (GET、POST 等等)
用法
Request.Method
回傳
貼文資料
在 v1.9 之前新增請求的 post body,若有的話。
用法
Request.PostData
回傳
貼文資料緩衝區
在 v1.9 之前新增請求的 post body 以二進制形式,若有的話。
用法
Request.PostDataBuffer
回傳
貼文資料 JSON
新增於:v1.12傳回已解析的請求 post body,適用於 form-urlencoded
和 JSON 作為後備方案 (若有的話)。
當回應為 application/x-www-form-urlencoded
時,將回傳值的鍵/值物件。否則,它將被剖析為 JSON。
用法
Request.PostDataJSON
回傳
重新導向來源
在 v1.9 之前新增伺服器將請求重新導向至此請求的來源請求 (若有的話)。
當伺服器以重新導向回應時,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.RedirectedFrom 相反。
Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True
回傳
資源類型
在 v1.9 之前新增包含請求的資源類型,如同渲染引擎所感知。ResourceType 將會是以下其中之一:document
、stylesheet
、image
、media
、font
、script
、texttrack
、xhr
、fetch
、eventsource
、websocket
、manifest
、other
。
用法
Request.ResourceType
回傳
回應 Async
在 v1.9 之前新增傳回相符的 Response 物件,若因錯誤而未收到回應,則傳回 null
。
用法
await Request.ResponseAsync();
回傳
大小 Async
新增於:v1.15傳回指定請求的資源大小資訊。
用法
await Request.SizesAsync();
回傳
- 大小#
計時
在 v1.9 之前新增傳回指定請求的資源計時資訊。大部分的計時值會在收到回應時變成可用,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 之前新增請求的 URL。
用法
Request.Url
回傳