请求
每当页面发送网络资源请求时,Page 都会发出以下事件序列。
- page.on('request') 在页面发出请求时发出。
- page.on('response') 在请求收到响应状态和标题时发出。
- page.on('requestfinished') 在下载响应正文并完成请求时发出。
如果请求在某个时刻失败,则会发出 page.on('requestfailed') 事件,而不是 'requestfinished'
事件(可能也代替 'response' 事件)。
HTTP 错误响应(如 404 或 503)从 HTTP 角度来看仍然是成功的响应,因此请求将使用 'requestfinished'
事件完成。
如果请求收到 'redirect' 响应,则请求将使用 requestfinished
事件成功完成,并且会向重定向的 URL 发出新请求。
方法
allHeaders
在以下版本中添加:v1.15包含与该请求关联的所有请求 HTTP 标头的对象。标头名称为小写。
用法
await request.allHeaders();
返回值
failure
在 v1.9 之前添加除非此请求失败,否则该方法返回 null
,如 requestfailed
事件所报告。
用法
记录所有失败请求的示例
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
返回值
frame
在 v1.9 之前添加返回启动此请求的 Frame。
用法
const frameUrl = request.frame().url();
返回值
细节
请注意,在某些情况下,框架不可用,此方法将抛出异常。
- 当请求源自服务工作线程时。您可以使用
request.serviceWorker()
来检查这一点。 - 当在创建相应的框架之前发出导航请求时。您可以使用 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 之前添加此请求是否驱动框架的导航。
在创建相应的框架之前发出一些导航请求,因此没有 request.frame() 可用。
用法
request.isNavigationRequest();
返回值
method
在 v1.9 之前添加请求的方法 (GET、POST 等)。
用法
request.method();
返回值
postData
在 v1.9 之前添加请求的发布正文(如果有)。
用法
request.postData();
返回值
postDataBuffer
在 v1.9 之前添加请求的发布正文的二进制形式(如果有)。
用法
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 之前添加返回匹配的 响应 对象,如果由于错误未收到响应,则返回 null
。
用法
await request.response();
返回值
serviceWorker
添加于:v1.24正在执行请求的服务 工作者。
用法
request.serviceWorker();
返回值
细节
此方法仅限于 Chromium。在使用其他浏览器时,调用它很安全,但它始终为 null
。
在服务工作者中发起的请求没有可用的 request.frame()。
sizes
在以下版本中添加:v1.15返回给定请求的资源大小信息。
用法
await request.sizes();
返回值
timing
在 v1.9 之前添加返回给定请求的资源计时信息。大多数计时值在响应时可用,responseEnd
在请求完成时可用。有关更多信息,请访问 资源计时 API。
用法
const requestFinishedPromise = page.waitForEvent('requestfinished');
await page.goto('http://example.com');
const request = await requestFinishedPromise;
console.log(request.timing());
返回值
- 对象#
-
startTime
数字请求开始时间,以自 1970 年 1 月 1 日 00:00:00 UTC 经过的毫秒数表示。
-
domainLookupStart
数字浏览器开始对资源进行域名查找之前的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
domainLookupEnd
数字浏览器开始对资源进行域名查找之后的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
connectStart
数字用户代理开始建立与服务器的连接以检索资源之前的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
secureConnectionStart
数字浏览器开始握手过程以保护当前连接之前的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
connectEnd
数字用户代理开始建立与服务器的连接以检索资源之前的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
requestStart
数字浏览器开始从服务器、缓存或本地资源请求资源之前的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
responseStart
数字浏览器从服务器、缓存或本地资源收到第一个响应字节之后的立即时间。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。 -
responseEnd
数字浏览器收到最后一个资源字节或在传输连接关闭之前,以先到者为准。该值以相对于
startTime
的毫秒数给出,如果不可用,则为 -1。
-
url
在 v1.9 之前添加请求的 URL。
用法
request.url();
返回值