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