跳至主要内容

请求

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

如果请求在某个时刻失败,那么将触发Page.RequestFailed事件,而不是'requestfinished'事件(也可能替代'response'事件)。

note

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

如果请求收到'redirect'响应,该请求将以requestfinished事件成功完成,并会向重定向的URL发起一个新请求。


方法

AllHeadersAsync

Added in: v1.15 request.AllHeadersAsync

一个包含与此请求相关的所有HTTP请求头的对象。所有头名称均为小写。

用法

await Request.AllHeadersAsync();

返回


失败

Added before v1.9 request.Failure

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

用法

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

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

返回


框架

Added before v1.9 request.Frame

返回发起此请求的Frame

用法

var frameUrl = request.Frame.Url;

返回

详情

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

  • 当请求源自Service Worker时。您可以使用request.serviceWorker()来检查这一点。
  • 当导航请求在对应的框架创建之前发出时。您可以使用Request.IsNavigationRequest来检查这一点。

这是一个处理所有情况的示例:


HeaderValueAsync

Added in: v1.15 request.HeaderValueAsync

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

用法

await Request.HeaderValueAsync(name);

参数

返回


Headers

Added before v1.9 request.Headers

一个包含请求HTTP头信息的对象。头名称均为小写。请注意,此方法不会返回与安全相关的头信息,包括与cookie相关的头。您可以使用Request.AllHeadersAsync()获取包含cookie信息的完整头列表。

用法

Request.Headers

返回


HeadersArrayAsync

Added in: v1.15 request.HeadersArrayAsync

一个包含与此请求关联的所有请求HTTP头信息的数组。与Request.AllHeadersAsync()不同,此处头名称不会转换为小写。具有多个条目的头信息(例如Set-Cookie)会在数组中多次出现。

用法

await Request.HeadersArrayAsync();

返回


IsNavigationRequest

Added before v1.9 request.IsNavigationRequest

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

某些导航请求在对应的框架创建之前就已发出,因此无法获取Request.Frame

用法

Request.IsNavigationRequest

返回


方法

Added before v1.9 request.Method

请求的方法(GET、POST等)

用法

Request.Method

返回


Post数据

Added before v1.9 request.PostData

请求的post正文(如果有的话)。

用法

Request.PostData

返回


PostData缓冲区

Added before v1.9 request.PostDataBuffer

请求的post body以二进制形式存在(如果有的话)。

用法

Request.PostDataBuffer

返回


PostDataJSON

Added in: v1.12 request.PostDataJSON

返回解析后的请求体,如果是form-urlencoded格式则优先解析,否则会尝试解析为JSON格式。

当响应为application/x-www-form-urlencoded时,将返回值的键/值对象。否则将解析为JSON。

用法

Request.PostDataJSON

返回


重定向来源

Added before 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

返回


重定向到

Added before v1.9 request.RedirectedTo

如果服务器响应重定向,浏览器将发出新的请求。

用法

这个方法是Request.RedirectedFrom的反向操作:

Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True

返回


资源类型

Added before v1.9 request.ResourceType

包含渲染引擎感知到的请求资源类型。ResourceType将是以下之一:document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other

用法

Request.ResourceType

返回


ResponseAsync

Added before v1.9 request.ResponseAsync

返回匹配的Response对象,如果由于错误未收到响应则返回null

用法

await Request.ResponseAsync();

返回


SizesAsync

Added in: v1.15 request.SizesAsync

返回给定请求的资源大小信息。

用法

await Request.SizesAsync();

返回

  • Sizes#
    • requestBodySize int

      请求体(POST数据负载)的大小,以字节为单位。如果没有请求体则设置为0。

    • requestHeadersSize int

      从HTTP请求消息开始到(包括)正文前的双CRLF为止的总字节数。

    • responseBodySize int

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

    • responseHeadersSize int

      从HTTP响应消息开始到正文前的双CRLF(包括双CRLF)为止的总字节数。


计时

Added before 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]

      请求开始时间,以毫秒为单位,自UTC时间1970年1月1日00:00:00起计算

    • 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 [浮点数]

      浏览器接收到资源最后一个字节后的时间,或传输连接关闭前的时间,以先发生者为准。该值以相对于startTime的毫秒数给出,如果不可用则为-1。


网址

Added before v1.9 request.Url

请求的URL。

用法

Request.Url

返回