Request
每当页面发送网络资源请求时,Page 都会发出以下一系列事件:
- Page.Request:当页面发出请求时触发。
- Page.Response:当接收到请求的响应状态和标头时/后触发。
- Page.RequestFinished:当响应主体已下载且请求完成时触发。
如果请求在某个环节失败,则不会触发 'requestfinished' 事件(可能也不会触发 'response' 事件),而是会触发 Page.RequestFailed 事件。
HTTP 错误响应,例如 404 或 503,从 HTTP 角度来看仍然是成功响应,因此请求将以'requestfinished'事件完成。
如果请求收到“重定向”响应,则该请求将成功地以requestfinished事件完成,并且会向重定向的 URL 发出新请求。
方法
AllHeadersAsync
新增于: v1.15一个包含与此请求关联的所有请求 HTTP 标头的对象。标头名称是小写。
用法
await Request.AllHeadersAsync();
返回
ExistingResponse
新增于: v1.59如果已接收到响应,则返回 Response 对象,否则返回 null。
与 Request.ResponseAsync() 不同,此方法不会等待响应到达。如果响应已接收,它将立即返回响应对象;如果尚未接收到响应,则返回 null。
用法
Request.ExistingResponse
返回
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()进行检查。 - 当导航请求在相应的框架创建之前发出时。您可以使用 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 的导航。
某些导航请求是在相应的框架创建之前发出的,因此没有可用的 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
返回