跳到主要内容

Request

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

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

备注

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

如果请求收到 “重定向” 响应,请求将以 requestfinished 事件成功结束,并向重定向的 URL 发出新请求。


方法

AllHeadersAsync

新增于:v1.15 request.AllHeadersAsync

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

用法

await Request.AllHeadersAsync();

返回值


Failure

在 v1.9 之前新增 request.Failure

除非此请求失败(如 requestfailed 事件所报告),否则该方法返回 null

用法

记录所有失败请求的示例:

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

返回值


Frame

在 v1.9 之前添加 request.Frame

返回发起此请求的 Frame

用法

var frameUrl = request.Frame.Url;

返回值

详细信息

请注意,在某些情况下,框架不可用,此方法将抛出异常。

  • 当请求源自 Service Worker 时。你可以使用 request.serviceWorker() 进行检查。
  • 当在相应框架创建之前发出导航请求时。你可以使用 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

此请求是否驱动框架的导航。

一些导航请求在相应框架创建之前发出,因此没有可用的 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

包含渲染引擎所识别的请求资源类型。资源类型将是以下之一:documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

用法

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(包括双 CRLF)的总字节数。

    • responseBodySize int

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

    • responseHeadersSize int

      从 HTTP 响应消息开头到响应体之前的双 CRLF(包括双 CRLF)的总字节数。


Timing

在 v1.9 之前添加 request.Timing

返回给定请求的资源计时信息。大多数计时值在收到响应时可用,responseEnd 在请求完成时可用。在 资源计时 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

返回值