Skip to main content

Request

每当页面发送网络资源请求时,Page 会发出以下事件序列:

如果请求在某个时刻失败,则会发出 page.on('requestfailed') 事件,而不是 'requestfinished' 事件(并且可能代替 'response' 事件)。

note

HTTP 错误响应(如 404 或 503)从 HTTP 角度来看仍然是成功的响应,因此请求将以 'requestfinished' 事件完成。

如果请求收到 'redirect' 响应,则请求将以 'requestfinished' 事件成功完成,并向重定向的 url 发出新请求。

request.allHeaders()

Added in: v1.15

包含与此请求关联的所有请求 HTTP 标头的对象。标头名称为小写。

request.failure()

Added in: v1.8
  • returns: <null|Object>#
    • errorText <string> 人类可读的错误消息,例如 'net::ERR_FAILED'

除非此请求已失败(如 requestfailed 事件所报告),否则该方法返回 null

记录所有失败请求的示例:

page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});

request.frame()

Added in: v1.8

返回发起此请求的 Frame

request.headerValue(name)

Added in: v1.15

返回与名称匹配的标头的值。名称不区分大小写。

request.headers()

Added in: v1.8

包含请求 HTTP 标头的对象。标头名称为小写。请注意,此方法不返回与安全相关的标头,包括与 cookie 相关的标头。您可以使用 request.allHeaders() 获取包含 cookie 信息的完整标头列表。

request.headersArray()

Added in: v1.15

包含与此请求关联的所有请求 HTTP 标头的数组。与 request.allHeaders() 不同,标头名称不是小写的。具有多个条目的标头(例如 Set-Cookie)在数组中多次出现。

request.isNavigationRequest()

Added in: v1.8

此请求是否驱动框架的导航。

request.method()

Added in: v1.8

请求的方法(GET、POST 等)。

request.postData()

Added in: v1.8

请求的 post 正文(如果有)。

request.postDataBuffer()

Added in: v1.8

二进制形式的请求 post 正文(如果有)。

request.postDataJSON()

Added in: v1.8

返回已解析的 form-urlencoded 请求正文,如果有,则作为回退返回 JSON。

当响应为 application/x-www-form-urlencoded 时,将返回值的键/值对象。否则,它将被解析为 JSON。

request.redirectedFrom()

Added in: v1.8

服务器重定向到此请求的请求(如果有)。

当服务器响应重定向时,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

request.redirectedTo()

Added in: v1.8

如果服务器响应重定向,浏览器发出的新请求。

此方法与 request.redirectedFrom() 相反:

console.log(request.redirectedFrom().redirectedTo() === request); // true

request.resourceType()

Added in: v1.8

包含渲染引擎感知的请求资源类型。ResourceType 将是以下之一:documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

request.response()

Added in: v1.8

返回匹配的 Response 对象,如果由于错误未收到响应,则返回 null

request.serviceWorker()

Added in: v1.24
note

此字段仅限 Chromium。在使用其他浏览器时调用它是安全的,但它始终为 null

执行请求的 Service Worker

request.sizes()

Added in: v1.15
  • returns: <Promise<Object>>#
    • requestBodySize <number> 请求正文(POST 数据负载)的大小(以字节为单位)。如果没有正文,则设置为 0。
    • requestHeadersSize <number> 从 HTTP 请求消息开始到正文之前的双 CRLF(包括)的总字节数。
    • responseBodySize <number> 接收到的响应正文(编码)的大小(以字节为单位)。
    • responseHeadersSize <number> 从 HTTP 响应消息开始到正文之前的双 CRLF(包括)的总字节数。

返回给定请求的资源大小信息。

request.timing()

Added in: v1.8
  • returns: <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。

返回给定请求的资源计时信息。大多数计时值在响应时变得可用,responseEnd 在请求完成时变得可用。在 Resource Timing API 中查找更多信息。

const [request] = await Promise.all([
page.waitForEvent('requestfinished'),
page.goto('http://example.com')
]);
console.log(request.timing());

request.url()

Added in: v1.8

请求的 URL。