Request
当页面发送网络资源请求时,Page 会依次触发以下事件序列:
- page.on('request') - 当页面发起请求时触发
- page.on('response') - 当收到请求的响应状态码和头部时触发
- page.on('requestfinished') - 当响应体下载完成且请求结束时触发
如果请求在某个环节失败,则会触发 page.on('requestfailed') 事件来替代 'requestfinished'
事件(也可能替代 'response' 事件)。
注意
从 HTTP 协议角度看,404 或 503 等错误响应仍属于成功响应,因此这类请求会以 'requestfinished'
事件完成。
如果请求收到 'redirect' 响应,原请求会以 requestfinished
事件成功结束,同时会向重定向 URL 发起新的请求。
方法
allHeaders
Added in: v1.15返回与此请求关联的所有 HTTP 请求头对象。所有头名称均为小写形式。
用法
await request.allHeaders();
返回值
failure
Added before v1.9除非请求失败(由 requestfailed
事件报告),否则该方法返回 null
。
用法
记录所有失败请求的示例:
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
返回值
frame
Added before v1.9返回发起此请求的 Frame。
用法
const frameUrl = request.frame().url();
返回值
详细信息
请注意在某些情况下帧不可用,此方法会抛出异常:
- 当请求源自 Service Worker 时。可以使用
request.serviceWorker()
来检查。 - 当导航请求在对应帧创建之前发出时。可以使用 request.isNavigationRequest() 来检查。
以下是处理所有情况的示例:
if (request.serviceWorker())
console.log(`请求 ${request.url()} 来自 service worker`);
else if (request.isNavigationRequest())
console.log(`请求 ${request.url()} 是导航请求`);
else
console.log(`请求 ${request.url()} 来自帧 ${request.frame().url()}`);
headerValue
Added in: v1.15返回与名称匹配的请求头值。名称不区分大小写。
用法
await request.headerValue(name);
参数
返回值
headers
Added before v1.9包含请求 HTTP 头部的对象。头部名称已转换为小写。注意此方法不会返回安全相关的头部,包括与 cookie 相关的头部。如需获取包含 cookie
信息的完整头部列表,可以使用 request.allHeaders()。
用法
request.headers();
返回值
headersArray
Added in: v1.15包含与此请求关联的所有 HTTP 请求头的数组。与 request.allHeaders() 不同,此方法不会将头名称转为小写。具有多个条目的头(如 Set-Cookie
)会在数组中多次出现。
用法
await request.headersArray();
返回值
isNavigationRequest
Added before v1.9判断此请求是否驱动了框架的导航行为。
某些导航请求在对应框架创建之前就已发出,因此无法使用 request.frame() 方法。
用法
request.isNavigationRequest();
返回值
method
Added before v1.9获取请求的 HTTP 方法(GET、POST 等)。
用法
request.method();
返回值
postData
Added before v1.9请求的 post 请求体(如果有)。
用法
request.postData();
返回值
postDataBuffer
Added before v1.9请求的 post 请求体二进制形式(如果有)。
用法
request.postDataBuffer();
返回值
postDataJSON
Added before v1.9返回解析后的请求体,优先解析为 form-urlencoded
格式,如果失败则尝试解析为 JSON(如果有)。
当响应是 application/x-www-form-urlencoded
类型时,将返回键值对对象。否则会尝试解析为 JSON。
用法
request.postDataJSON();
返回值
redirectedFrom
Added before v1.9服务器重定向到此请求的原始请求(如果存在)。
当服务器响应重定向时,Playwright 会创建一个新的 Request 对象。这两个请求通过 redirectedFrom()
和 redirectedTo()
方法相互关联。当发生多次服务器重定向时,可以通过重复调用 redirectedFrom()
来构建完整的重定向链。
使用示例
例如,如果网站 http://example.com
重定向到 https://example.com
:
const response = await page.goto('http://example.com');
console.log(response.request().redirectedFrom().url()); // 'http://example.com'
如果网站 https://google.com
没有重定向:
const response = await page.goto('https://google.com');
console.log(response.request().redirectedFrom()); // null
返回值
redirectedTo
Added before v1.9如果服务器响应重定向,浏览器发出的新请求。
使用示例
此方法是 request.redirectedFrom() 的反向操作:
console.log(request.redirectedFrom().redirectedTo() === request); // true
返回值
resourceType
Added before v1.9包含渲染引擎感知到的请求资源类型。ResourceType 会是以下类型之一:document
、stylesheet
、image
、media
、font
、script
、texttrack
、xhr
、fetch
、eventsource
、websocket
、manifest
、other
。
用法
request.resourceType();
返回值
response
Added before v1.9返回匹配的 Response 对象,如果由于错误未收到响应则返回 null
。
用法
await request.response();
返回值
serviceWorker
Added in: v1.24执行请求的 Service Worker。
用法
request.serviceWorker();
返回值
详情
此方法仅适用于 Chromium。在其他浏览器中调用是安全的,但始终会返回 null
。
源自 Service Worker 的请求没有可用的 request.frame()。
sizes
添加于: v1.15返回给定请求的资源大小信息。
用法
await request.sizes();
返回值
timing
v1.9 版本前添加返回给定请求的资源计时信息。大多数计时值在响应时可用,responseEnd
在请求完成时可用。更多信息请参考 Resource Timing API。
用法
const requestFinishedPromise = page.waitForEvent('requestfinished');
await page.goto('http://example.com');
const request = await requestFinishedPromise;
console.log(request.timing());
返回值
- Object#
-
startTime
number请求开始时间(自 UTC 时间 1970 年 1 月 1 日 00:00:00 起经过的毫秒数)
-
domainLookupStart
number浏览器开始资源域名查询前的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
domainLookupEnd
number浏览器完成资源域名查询后的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
connectStart
number用户代理开始与服务器建立连接以获取资源前的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
secureConnectionStart
number浏览器开始安全连接握手过程前的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
connectEnd
number用户代理完成与服务器建立连接以获取资源前的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
requestStart
number浏览器开始从服务器、缓存或本地资源请求资源前的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
responseStart
number浏览器从服务器、缓存或本地资源接收到响应第一个字节后的时间。值为相对于
startTime
的毫秒数,不可用时为 -1。 -
responseEnd
number浏览器接收到资源最后一个字节后或传输连接关闭前的时间(以先发生者为准)。值为相对于
startTime
的毫秒数,不可用时为 -1。
-
url
v1.9 版本之前添加请求的 URL。
用法
request.url();
返回值