Request
每当页面发送网络资源请求时,会由 Page 发出以下事件序列:
- page.on('request') - 当页面发出请求时发出。
- page.on('response') - 当收到请求的响应状态和头部信息时发出。
- page.on('requestfinished') - 当响应体下载完毕且请求完成时发出。
如果在某个时刻请求失败,则会发出 page.on('requestfailed') 事件,而不是 'requestfinished'
事件(可能也代替 'response' 事件)。
从 HTTP 的角度来看,HTTP 错误响应(例如 404 或 503)仍然是成功的响应,因此请求会以 'requestfinished'
事件完成。
如果请求收到“重定向”响应,则该请求会成功以 requestfinished
事件完成,并向重定向的 URL 发出新的请求。
方法
allHeaders
新增于: v1.15一个包含与此请求关联的所有请求 HTTP 头部的对象。头部名称已转换为小写。
用法
await request.allHeaders();
返回
failure
新增于 v1.9 之前除非此请求已失败(由 requestfailed
事件报告),否则该方法返回 null
。
用法
记录所有失败请求的示例
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
返回
frame
新增于 v1.9 之前返回发起此请求的 Frame。
用法
const frameUrl = request.frame().url();
返回
详情
请注意,在某些情况下 Frame 不可用,此方法会抛出错误。
- 当请求源自 Service Worker 时。您可以使用
request.serviceWorker()
进行检查。 - 当导航请求在相应的 Frame 创建之前发出时。您可以使用 request.isNavigationRequest() 进行检查。
以下是处理所有情况的示例
if (request.serviceWorker())
console.log(`request ${request.url()} from a service worker`);
else if (request.isNavigationRequest())
console.log(`request ${request.url()} is a navigation request`);
else
console.log(`request ${request.url()} from a frame ${request.frame().url()}`);
headerValue
新增于: v1.15返回与名称匹配的头部值。名称不区分大小写。
用法
await request.headerValue(name);
参数
返回
headers
新增于 v1.9 之前一个包含请求 HTTP 头部的对象。头部名称已转换为小写。请注意,此方法不返回与安全相关的头部,包括与 cookie 相关的头部。您可以使用 request.allHeaders() 获取包含 cookie
信息的完整头部列表。
用法
request.headers();
返回
headersArray
新增于: v1.15一个包含与此请求关联的所有请求 HTTP 头部的数组。与 request.allHeaders() 不同,头部名称未转换为小写。具有多个条目的头部(例如 Set-Cookie
)会在数组中多次出现。
用法
await request.headersArray();
返回
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.9 之前返回解析后的请求体,用于 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
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
新增于 v1.9 之前如果服务器响应重定向,则浏览器发出的新请求。
用法
此方法与 request.redirectedFrom() 相反
console.log(request.redirectedFrom().redirectedTo() === request); // true
返回
resourceType
新增于 v1.9 之前包含渲染引擎感知到的请求资源类型。ResourceType 将是以下类型之一:document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
。
用法
request.resourceType();
返回
response
新增于 v1.9 之前返回匹配的 Response 对象,如果由于错误未收到响应,则返回 null
。
用法
await request.response();
返回
serviceWorker
新增于: 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请求开始时间,自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数
-
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();
返回