跳到主要内容

请求

每当页面发送网络资源请求时,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

除非此请求失败(如 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

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

返回值