跳到主要内容

Request

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

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

注意

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

如果请求收到 'redirect' 响应,则请求将以 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;

返回值

详情

请注意,在某些情况下,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(包括双 CRLF)的总字节数。

    • responseBodySize int

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

    • responseHeadersSize int

      从 HTTP 响应消息的开始到正文之前的双 CRLF(包括双 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

返回值