Request
每当页面发送网络资源请求时,由 Page 发出以下事件序列
- Page.Request 在页面发出请求时触发。
- Page.Response 在收到请求的响应状态和标头时触发。
- Page.RequestFinished 在响应正文下载完成且请求完成时触发。
如果在某个时刻请求失败,则会触发 Page.RequestFailed 事件,而不是 'requestfinished'
事件(也可能不是 'response' 事件)。
从 HTTP 角度来看,HTTP 错误响应(例如 404 或 503)仍然是成功的响应,因此请求将以 'requestfinished'
事件完成。
如果请求收到“重定向”响应,则请求将成功以 requestfinished 事件完成,并向重定向的 URL 发出新请求。
方法
AllHeadersAsync
新增于:v1.15一个包含与此请求关联的所有 HTTP 请求标头的对象。标头名称均为小写。
用法
await Request.AllHeadersAsync();
返回
Failure
v1.9 之前添加此方法返回 null
,除非此请求失败,如 requestfailed 事件所报告的那样。
用法
记录所有失败请求的示例
page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};
返回
Frame
v1.9 之前添加返回启动此请求的 Frame。
用法
var frameUrl = request.Frame.Url;
返回
详细信息
请注意,在某些情况下,框架不可用,此方法将抛出异常。
- 当请求源自 Service Worker 时。你可以使用
request.serviceWorker()
进行检查。 - 在创建对应的框架之前发出导航请求时。你可以使用 Request.IsNavigationRequest 进行检查。
以下是一个处理所有情况的示例
HeaderValueAsync
新增于:v1.15返回与名称匹配的标头的值。名称不区分大小写。
用法
await Request.HeaderValueAsync(name);
参数
返回
Headers
v1.9 之前添加包含请求 HTTP 标头的对象。标头名称均为小写。请注意,此方法不返回与安全相关的标头,包括与 cookie 相关的标头。你可以使用 Request.AllHeadersAsync() 获取包含 cookie
信息的完整标头列表。
用法
Request.Headers
返回
HeadersArrayAsync
新增于:v1.15一个包含与此请求关联的所有 HTTP 请求标头的数组。与 Request.AllHeadersAsync() 不同,标头名称不使用小写。具有多个条目的标头(例如 Set-Cookie
)在数组中多次出现。
用法
await Request.HeadersArrayAsync();
返回
- IReadOnlyList<
HttpHeader
>#
IsNavigationRequest
v1.9 之前添加此请求是否正在驱动框架的导航。
某些导航请求在创建对应的框架之前发出,因此 Request.Frame 不可用。
用法
Request.IsNavigationRequest
返回
Method
v1.9 之前添加请求的方法(GET、POST 等)
用法
Request.Method
返回
PostData
v1.9 之前添加请求的正文(如果存在)。
用法
Request.PostData
返回
PostDataBuffer
v1.9 之前添加请求的二进制形式的正文(如果存在)。
用法
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
返回
ResourceType
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
返回