跳转到主要内容

Request

每当页面发送网络资源请求时,Page 都会发出以下事件序列

如果请求在某个点失败,则会触发 Page.RequestFailed 事件,而不是 `requestfinished` 事件(也可能不是 'response' 事件)。

注意

HTTP 错误响应,例如 404 或 503,从 HTTP 角度来看仍然是成功响应,因此请求将以'requestfinished'事件完成。

如果请求收到“重定向”响应,则该请求将成功地以requestfinished事件完成,并且会向重定向的 URL 发出新请求。


方法

AllHeadersAsync

新增于: v1.15 request.AllHeadersAsync

一个包含与此请求关联的所有请求 HTTP 标头的对象。标头名称是小写。

用法

await Request.AllHeadersAsync();

返回


Failure

v1.9 之前添加 request.Failure

此方法返回null,除非此请求已失败,如requestfailed事件报告的那样。

用法

记录所有失败请求的示例

page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};

返回


Frame

v1.9 之前添加 request.Frame

返回发起此请求的 Frame

用法

var frameUrl = request.Frame.Url;

返回

详情

请注意,在某些情况下,frame 不可用,此方法将抛出错误。

  • 当请求源自 Service Worker 时。您可以使用request.serviceWorker()进行检查。
  • 当在创建相应 frame 之前发出导航请求时。您可以使用 Request.IsNavigationRequest 来检查。

这是一个处理所有情况的示例


HeaderValueAsync

新增于: v1.15 request.HeaderValueAsync

返回与名称匹配的标头的值。名称不区分大小写。

用法

await Request.HeaderValueAsync(name);

参数

返回


Headers

v1.9 之前添加 request.Headers

一个包含请求 HTTP 头的对象。头名称为小写。请注意,此方法不返回与安全相关的头,包括与 cookie 相关的头。您可以使用 Request.AllHeadersAsync() 获取包含 `cookie` 信息的完整头列表。

用法

Request.Headers

返回


HeadersArrayAsync

新增于: v1.15 request.HeadersArrayAsync

一个包含与此请求关联的所有 HTTP 请求头的数组。与 Request.AllHeadersAsync() 不同,头名称不是小写的。具有多个条目的头,例如 `Set-Cookie`,会在数组中出现多次。

用法

await Request.HeadersArrayAsync();

返回


IsNavigationRequest

v1.9 之前添加 request.IsNavigationRequest

此请求是否正在驱动 frame 的导航。

一些导航请求在相应 frame 创建之前发出,因此没有 Request.Frame 可用。

用法

Request.IsNavigationRequest

返回


Method

v1.9 之前添加 request.Method

请求方法(GET、POST 等)

用法

Request.Method

返回


PostData

v1.9 之前添加 request.PostData

请求的 POST 正文,如果有的话。

用法

Request.PostData

返回


PostDataBuffer

v1.9 之前添加 request.PostDataBuffer

请求的 POST 正文的二进制形式,如果有的话。

用法

Request.PostDataBuffer

返回


PostDataJSON

添加于:v1.12 request.PostDataJSON

返回解析后的请求正文,对于form-urlencoded和 JSON(作为备用)而言,如果有的话。

当响应是application/x-www-form-urlencoded时,将返回一个键/值对象。否则,它将被解析为 JSON。

用法

Request.PostDataJSON

返回


RedirectedFrom

v1.9 之前添加 request.RedirectedFrom

被服务器重定向到此请求的请求,如果有的话。

当服务器响应重定向时,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.RedirectedTo

如果服务器响应重定向,浏览器发出的新请求。

用法

此方法与 Request.RedirectedFrom 相反

Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True

返回


ResourceType

v1.9 之前添加 request.ResourceType

包含渲染引擎感知的请求资源类型。ResourceType 将是以下之一:`document`、`stylesheet`、`image`、`media`、`font`、`script`、`texttrack`、`xhr`、`fetch`、`eventsource`、`websocket`、`manifest`、`other`。

用法

Request.ResourceType

返回


ResponseAsync

v1.9 之前添加 request.ResponseAsync

返回匹配的 Response 对象,如果由于错误未收到响应,则返回 `null`。

用法

await Request.ResponseAsync();

返回


SizesAsync

新增于: v1.15 request.SizesAsync

返回给定请求的资源大小信息。

用法

await Request.SizesAsync();

返回

  • Sizes#
    • requestBodySize int

      请求正文(POST 数据有效负载)的大小,以字节为单位。如果没有正文,则设置为 0。

    • requestHeadersSize int

      从 HTTP 请求消息开始到(包括)正文前的双 CRLF 的总字节数。

    • responseBodySize int

      接收到的响应正文(编码后)的大小,以字节为单位。

    • responseHeadersSize int

      从 HTTP 响应消息开始到(包括)正文前的双 CRLF 的总字节数。


Timing

v1.9 之前添加 request.Timing

返回给定请求的资源计时信息。大多数计时值在响应时可用,`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 之前添加 request.Url

请求的 URL。

用法

Request.Url

返回