请求
每当页面发送对网络资源的请求时,Page 会发出以下一系列事件。
- Page.Request 在页面发出请求时发出。
- Page.Response 在接收请求的响应状态和标头时发出。
- Page.RequestFinished 在下载响应正文并完成请求时发出。
如果请求在某个阶段失败,则将发出 Page.RequestFailed 事件,而不是 'requestfinished'
事件(以及可能不是 'response' 事件)。
HTTP 错误响应(如 404 或 503)从 HTTP 角度来看仍然是成功的响应,因此请求将使用 'requestfinished'
事件完成。
如果请求收到“重定向”响应,则请求将使用 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;
返回
详细信息
请注意,在某些情况下,框架不可用,此方法将抛出异常。
- 当请求来自服务工作者时。您可以使用
request.serviceWorker()
来检查这一点。 - 当在创建相应的框架之前发出导航请求时。您可以使用 Request.IsNavigationRequest 来检查这一点。
以下是一个处理所有情况的示例
HeaderValueAsync
添加于:v1.15返回与名称匹配的标头的值。名称不区分大小写。
用法
await Request.HeaderValueAsync(name);
参数
返回
标头
添加于 v1.9 之前包含请求 HTTP 标头的对象。标头名称将转换为小写。请注意,此方法不会返回与安全相关的标头,包括与 cookie 相关的标头。您可以使用 Request.AllHeadersAsync() 获取包含 cookie
信息的完整标头列表。
用法
Request.Headers
返回
HeadersArrayAsync
添加于:v1.15包含与该请求关联的所有请求 HTTP 标头的数组。与 Request.AllHeadersAsync() 不同,标头名称不会转换为小写。具有多个条目的标头(如 Set-Cookie
)将在数组中出现多次。
用法
await Request.HeadersArrayAsync();
返回
- IEnumerable<
HttpHeader
>#
IsNavigationRequest
添加于 v1.9 之前此请求是否正在驱动框架的导航。
在创建相应的框架之前,会发出一些导航请求,因此没有 Request.Frame 可用。
用法
Request.IsNavigationRequest
返回
方法
添加于 v1.9 之前请求的方法(GET、POST 等)。
用法
Request.Method
返回
PostData
添加于 v1.9 之前请求的 POST 主体(如果有)。
用法
Request.PostData
返回
PostDataBuffer
添加于 v1.9 之前请求的 POST 主体以二进制形式(如果有)。
用法
Request.PostDataBuffer
返回
PostDataJSON
添加于:v1.12返回解析的请求主体,用于 form-urlencoded
和 JSON 作为回退(如果有)。
当响应为 application/x-www-form-urlencoded
时,将返回值的键/值对象。否则,将解析为 JSON。
用法
Request.PostDataJSON
返回
RedirectedFrom
添加于 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
返回
RedirectedTo
添加于 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
返回
ResponseAsync
添加于 v1.9 之前返回匹配的 Response 对象,如果由于错误未收到响应,则返回 null
。
用法
await Request.ResponseAsync();
返回
SizesAsync
添加于:v1.15返回给定请求的资源大小信息。
用法
await Request.SizesAsync();
返回
- Sizes#
Timing
添加于 v1.9 之前返回给定请求的资源计时信息。大多数计时值在响应时变得可用,responseEnd
在请求完成时变得可用。在 Resource Timing API 中查找更多信息。
用法
var request = await page.RunAndWaitForRequestFinishedAsync(async () =>
{
await page.GotoAsync("https://www.microsoft.com");
});
Console.WriteLine(request.Timing.ResponseEnd);
返回
- Timing#
-
startTime
[float]请求开始时间(以自 1970 年 1 月 1 日 00:00:00 UTC 经过的毫秒数表示)
-
domainLookupStart
[float]浏览器开始为资源执行域名查找之前的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
domainLookupEnd
[float]浏览器开始为资源执行域名查找之后的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
connectStart
[float]用户代理开始建立与服务器的连接以检索资源之前的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
secureConnectionStart
[float]浏览器开始握手过程以保护当前连接之前的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
connectEnd
[float]用户代理开始建立与服务器的连接以检索资源之前的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
requestStart
[float]浏览器开始从服务器、缓存或本地资源请求资源之前的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
responseStart
[float]浏览器从服务器、缓存或本地资源接收到第一个响应字节之后的时刻。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。 -
responseEnd
[float]浏览器接收到最后一个资源字节之后的时刻,或传输连接关闭之前的时刻(以先发生的为准)。该值以相对于
startTime
的毫秒数给出,-1 表示不可用。
-
Url
添加于 v1.9 之前请求的 URL。
用法
Request.Url
返回