跳到主要内容

Request

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

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

注意

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

如果请求收到“重定向”响应,则请求将使用 requestfinished 事件成功完成,并且将向重定向的 URL 发出新请求。


方法

allHeaders

添加于: v1.15 request.allHeaders

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

用法

await request.allHeaders();

返回值


failure

添加于 v1.9 之前 request.failure

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

用法

记录所有失败请求的示例

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

返回值

  • null | Object#
    • errorText string

      人类可读的错误消息,例如 'net::ERR_FAILED'


frame

添加于 v1.9 之前 request.frame

返回启动此请求的 Frame

用法

const frameUrl = request.frame().url();

返回值

详情

请注意,在某些情况下,框架不可用,并且此方法将抛出错误。

  • 当请求源自 Service Worker 时。您可以使用 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 request.headerValue

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

用法

await request.headerValue(name);

参数

返回值


headers

添加于 v1.9 之前 request.headers

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

用法

request.headers();

返回值


headersArray

添加于: v1.15 request.headersArray

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

用法

await request.headersArray();

返回值


isNavigationRequest

添加于 v1.9 之前 request.isNavigationRequest

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

一些导航请求在创建相应框架之前发出,因此没有可用的 request.frame()

用法

request.isNavigationRequest();

返回值


method

添加于 v1.9 之前 request.method

请求的方法(GET、POST 等)

用法

request.method();

返回值


postData

添加于 v1.9 之前 request.postData

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

用法

request.postData();

返回值


postDataBuffer

添加于 v1.9 之前 request.postDataBuffer

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

用法

request.postDataBuffer();

返回值


postDataJSON

添加于 v1.9 之前 request.postDataJSON

返回已解析的请求正文,用于 form-urlencoded,如果存在任何回退,则返回 JSON。

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

用法

request.postDataJSON();

返回值


redirectedFrom

添加于 v1.9 之前 request.redirectedFrom

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

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

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

用法

此方法与 request.redirectedFrom() 相反

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

返回值


resourceType

添加于 v1.9 之前 request.resourceType

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

用法

request.resourceType();

返回值


response

添加于 v1.9 之前 request.response

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

用法

await request.response();

返回值


serviceWorker

添加于: v1.24 request.serviceWorker

执行请求的 Service Worker

用法

request.serviceWorker();

返回值

详情

此方法仅适用于 Chromium。在使用其他浏览器时调用它是安全的,但它将始终为 null

源自 Service Worker 的请求没有可用的 request.frame()


sizes

添加于: v1.15 request.sizes

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

用法

await request.sizes();

返回值

  • Promise<Object>#
    • requestBodySize number

      请求正文(POST 数据负载)的大小(以字节为单位)。如果不存在正文,则设置为 0。

    • requestHeadersSize number

      从 HTTP 请求消息的开头到(包括)正文之前的双 CRLF 的总字节数。

    • responseBodySize number

      接收到的响应正文(已编码)的大小(以字节为单位)。

    • responseHeadersSize number

      从 HTTP 响应消息的开头到(包括)正文之前的双 CRLF 的总字节数。


timing

添加于 v1.9 之前 request.timing

返回给定请求的资源计时信息。大多数计时值在响应后可用,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 之前 request.url

请求的 URL。

用法

request.url();

返回值