跳到主内容

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

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

用法

记录所有失败请求的示例

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

请求的正文(如果存在)。

用法

Request.PostData

返回


PostDataBuffer

v1.9 之前添加 request.PostDataBuffer

请求的二进制形式的正文(如果存在)。

用法

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

返回