Request
每当页面发送网络资源请求时,Page 会发出以下事件序列
- Page.Request 当页面发出请求时发出。
- Page.Response 当/如果收到请求的响应状态和标头时发出。
- Page.RequestFinished 当响应正文下载完成且请求完成时发出。
如果请求在某个时候失败,则会发出 Page.RequestFailed 事件,而不是 'requestfinished'
事件(也可能不是 'response' 事件)。
HTTP 错误响应(例如 404 或 503)从 HTTP 的角度来看仍然是成功的响应,因此请求将以 'requestfinished'
事件完成。
如果请求收到 'redirect' 响应,则请求将以 requestfinished
事件成功完成,并向重定向的 URL 发出新请求。
方法
AllHeadersAsync
添加于: v1.15一个包含与此请求关联的所有请求 HTTP 标头的对象。标头名称均为小写。
用法
await Request.AllHeadersAsync();
返回值
Failure
添加于 v1.9 之前除非此请求失败(如 requestfailed
事件报告),否则该方法返回 null
。
用法
记录所有失败请求的示例
page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};
返回值
Frame
添加于 v1.9 之前返回启动此请求的 Frame。
用法
var frameUrl = request.Frame.Url;
返回值
详情
请注意,在某些情况下,Frame 不可用,此方法将抛出异常。
- 当请求源自 Service Worker 时。您可以使用
request.serviceWorker()
进行检查。 - 当导航请求在创建相应的 Frame 之前发出时。您可以使用 Request.IsNavigationRequest 进行检查。
这是一个处理所有情况的示例
HeaderValueAsync
添加于: v1.15返回与名称匹配的标头的值。名称不区分大小写。
用法
await Request.HeaderValueAsync(name);
参数
返回值
Headers
添加于 v1.9 之前一个包含请求 HTTP 标头的对象。标头名称均为小写。请注意,此方法不返回与安全相关的标头,包括与 Cookie 相关的标头。您可以使用 Request.AllHeadersAsync() 获取包含 cookie
信息的完整标头列表。
用法
Request.Headers
返回值
HeadersArrayAsync
添加于: v1.15一个包含与此请求关联的所有请求 HTTP 标头的数组。与 Request.AllHeadersAsync() 不同,标头名称不是小写。具有多个条目的标头(例如 Set-Cookie
)在数组中多次出现。
用法
await Request.HeadersArrayAsync();
返回值
- IEnumerable<
HttpHeader
>#
IsNavigationRequest
添加于 v1.9 之前此请求是否正在驱动 Frame 的导航。
某些导航请求在创建相应的 Frame 之前发出,因此没有可用的 Request.Frame。
用法
Request.IsNavigationRequest
返回值
Method
添加于 v1.9 之前请求的方法 (GET, POST 等)
用法
Request.Method
返回值
PostData
添加于 v1.9 之前请求的 POST 正文(如果有)。
用法
Request.PostData
返回值
PostDataBuffer
添加于 v1.9 之前请求的 POST 正文的二进制形式(如果有)。
用法
Request.PostDataBuffer
返回值
PostDataJSON
添加于: v1.12返回已解析的请求正文,用于 form-urlencoded
和 JSON,如果存在任何回退。
当响应为 application/x-www-form-urlencoded
时,将返回值的键/值对象。否则,它将被解析为 JSON。
用法
Request.PostDataJSON
返回值
RedirectedFrom
添加于 v1.9 之前如果服务器将请求重定向到此请求,则为重定向的请求。
当服务器以重定向响应时,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.RedirectedFrom 相反
Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True
返回值
ResourceType
添加于 v1.9 之前包含渲染引擎感知的请求的资源类型。ResourceType 将是以下之一:document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
用法
Request.ResourceType
返回值
ResponseAsync
添加于 v1.9 之前返回匹配的 Response 对象;如果由于错误而未收到响应,则返回 null
。
用法
await Request.ResponseAsync();
返回值
SizesAsync
添加于: v1.15返回给定请求的资源大小信息。
用法
await Request.SizesAsync();
返回值
- Sizes#
Timing
添加于 v1.9 之前返回给定请求的资源计时信息。大多数计时值在响应后可用,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 之前请求的 URL。
用法
Request.Url
返回值