跳至主要内容

请求

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

如果请求在某个时刻失败,那么不会触发'requestfinished'事件(也可能不会触发'response'事件),而是会触发page.on('requestfailed')事件。

note

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

如果请求收到'redirect'响应,该请求将以requestfinished事件成功完成,并会向重定向的URL发起一个新请求。


方法

allHeaders

Added in: v1.15 request.allHeaders

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

用法

await request.allHeaders();

返回


失败

Added before v1.9 request.failure

该方法返回null,除非请求失败,如requestfailed事件所报告。

用法

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

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

返回

  • null | Object#
    • errorText string

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


框架

Added before 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

Added in: v1.15 request.headerValue

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

用法

await request.headerValue(name);

参数

返回


headers

Added before v1.9 request.headers

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

用法

request.headers();

返回


headersArray

Added in: v1.15 request.headersArray

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

用法

await request.headersArray();

返回


isNavigationRequest

Added before v1.9 request.isNavigationRequest

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

某些导航请求在对应的框架创建之前就已发出,因此无法使用request.frame()

用法

request.isNavigationRequest();

返回


方法

Added before v1.9 request.method

请求的方法(GET、POST等)

用法

request.method();

返回


postData

Added before v1.9 request.postData

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

用法

request.postData();

返回


postData缓冲区

Added before v1.9 request.postDataBuffer

请求的post body以二进制形式存在(如果有的话)。

用法

request.postDataBuffer();

返回


postDataJSON

Added before v1.9 request.postDataJSON

返回解析后的请求体,如果是form-urlencoded格式则优先解析,否则会尝试解析为JSON格式。

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

用法

request.postDataJSON();

返回


重定向来源

Added before 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

Added before v1.9 request.redirectedTo

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

用法

这个方法是request.redirectedFrom()的反向操作:

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

返回


resourceType

Added before v1.9 request.resourceType

包含渲染引擎感知到的请求资源类型。ResourceType将是以下之一:document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other

用法

request.resourceType();

返回


响应

Added before v1.9 request.response

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

用法

await request.response();

返回


serviceWorker

Added in: v1.24 request.serviceWorker

执行请求的Service Worker

用法

request.serviceWorker();

返回

详情

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

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


尺寸

Added in: v1.15 request.sizes

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

用法

await request.sizes();

返回

  • Promise<Object>#
    • requestBodySize number

      请求体(POST数据负载)的大小,以字节为单位。如果没有请求体则设置为0。

    • requestHeadersSize number

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

    • responseBodySize number

      接收到的响应体(已编码)大小,单位为字节。

    • responseHeadersSize number

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


计时

Added before 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

      请求开始时间,以自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。


网址

Added before v1.9 request.url

请求的URL。

用法

request.url();

返回