Request
每当页面发送网络资源请求时,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();
返回
Failure
v1.9 之前添加此方法返回null
,除非此请求已失败,如requestfailed
事件报告的那样。
用法
记录所有失败请求的示例
page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};
返回
Frame
v1.9 之前添加返回发起此请求的 Frame。
用法
var frameUrl = request.Frame.Url;
返回
详情
请注意,在某些情况下,frame 不可用,此方法将抛出错误。
- 当请求源自 Service Worker 时。您可以使用
request.serviceWorker()
进行检查。 - 当在创建相应 frame 之前发出导航请求时。您可以使用 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 之前添加此请求是否正在驱动 frame 的导航。
一些导航请求在相应 frame 创建之前发出,因此没有 Request.Frame 可用。
用法
Request.IsNavigationRequest
返回
Method
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
返回
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
返回