跳至主要内容

请求

每当页面发送对网络资源的请求时,Page 会发出以下一系列事件。

如果请求在某个阶段失败,则将发出 Page.RequestFailed 事件,而不是 'requestfinished' 事件(以及可能不是 'response' 事件)。

注意

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

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


方法

AllHeadersAsync

添加于:v1.15 request.AllHeadersAsync

包含与该请求关联的所有请求 HTTP 标头的对象。标头名称将转换为小写。

用法

await Request.AllHeadersAsync();

返回


失败

添加于 v1.9 之前 request.Failure

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

用法

记录所有失败请求的示例

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

返回


框架

添加于 v1.9 之前 request.Frame

返回发起此请求的 Frame

用法

var frameUrl = request.Frame.Url;

返回

详细信息

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

  • 当请求来自服务工作者时。您可以使用 request.serviceWorker() 来检查这一点。
  • 当在创建相应的框架之前发出导航请求时。您可以使用 Request.IsNavigationRequest 来检查这一点。

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


HeaderValueAsync

添加于:v1.15 request.HeaderValueAsync

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

用法

await Request.HeaderValueAsync(name);

参数

返回


标头

添加于 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

返回


方法

添加于 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

返回


资源类型

添加于 v1.9 之前 request.ResourceType

包含渲染引擎感知到的请求的资源类型。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 的总字节数。

    • 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

返回