跳到主要内容

Request

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

如果请求在某个阶段失败,则不会触发 'requestfinished' 事件(并且可能不会触发 'response' 事件),而是会触发 page.on("requestfailed") 事件。

备注

HTTP 错误响应(如 404 或 503)从 HTTP 的角度来看依然属于成功响应,因此请求会以 'requestfinished' 事件结束。

如果请求收到“重定向”响应,请求会以 requestfinished 事件成功结束,并且会向重定向后的 url 发起新的请求。


方法

all_headers

新增于: v1.15 request.all_headers

返回一个包含该请求所有 HTTP 请求头的对象。请求头名称均为小写。

用法

request.all_headers()

返回值


header_value

新增于: v1.15 request.header_value

返回与指定名称匹配的请求头的值。名称不区分大小写。

用法

request.header_value(name)

参数

  • name str#

    请求头名称。

返回值


headers_array

新增于: v1.15 request.headers_array

返回一个包含该请求所有 HTTP 请求头的数组。与 request.all_headers() 不同,请求头名称不会被转换为小写。对于有多个条目的请求头(如 Set-Cookie),会在数组中出现多次。

用法

request.headers_array()

返回值


response

v1.9 之前新增 request.response

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

用法

request.response()

返回值


sizes

新增于: v1.15 request.sizes

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

用法

request.sizes()

返回值

  • Dict#
    • requestBodySize int

      请求体(POST 数据负载)的字节大小。如果没有请求体则为 0。

    • requestHeadersSize int

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

    • responseBodySize int

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

    • responseHeadersSize int

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


属性

failure

v1.9 之前新增 request.failure

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

用法

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

page.on("requestfailed", lambda request: print(request.url + " " + request.failure))

返回值


frame

v1.9 之前新增 request.frame

返回发起该请求的 Frame

用法

frame_url = request.frame.url

返回值

详情

注意,在某些情况下 frame 不可用,此方法会抛出异常。

  • 当请求来源于 Service Worker 时。你可以使用 request.serviceWorker() 进行检查。
  • 当导航请求在对应 frame 创建之前发起时。你可以使用 request.is_navigation_request() 进行检查。

以下是处理所有情况的示例:


headers

v1.9 之前新增 request.headers

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

用法

request.headers

返回值


is_navigation_request

v1.9 之前新增 request.is_navigation_request

判断该请求是否为驱动 frame 导航的请求。

有些导航请求会在对应的 frame 创建之前发起,因此无法获取到 request.frame

用法

request.is_navigation_request()

返回值


method

v1.9 之前新增 request.method

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

用法

request.method

返回值


post_data

v1.9 之前新增 request.post_data

请求的 post 请求体(如果有)。

用法

request.post_data

返回值


post_data_buffer

v1.9 之前新增 request.post_data_buffer

请求的 post 请求体(二进制形式,如果有)。

用法

request.post_data_buffer

返回值


post_data_json

v1.9 之前新增 request.post_data_json

返回解析后的请求体内容,支持 form-urlencoded 和 JSON(作为兜底)。

当请求体为 application/x-www-form-urlencoded 时,返回一个键值对对象。否则会尝试以 JSON 解析。

用法

request.post_data_json

返回值


redirected_from

v1.9 之前新增 request.redirected_from

如果有的话,返回被服务器重定向到当前请求的上一个请求。

当服务器返回重定向时,Playwright 会创建一个新的 Request 对象。这两个请求通过 redirectedFrom()redirectedTo() 方法关联。当发生多次服务器重定向时,可以通过多次调用 redirectedFrom() 构建完整的重定向链。

用法

例如,如果网站 http://example.com 重定向到 https://example.com

response = page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"

如果网站 https://google.com 没有重定向:

response = page.goto("https://google.com")
print(response.request.redirected_from) # None

返回值


redirected_to

v1.9 之前新增 request.redirected_to

如果服务器返回重定向,浏览器会发起新的请求。

用法

该方法与 request.redirected_from 相反:

assert request.redirected_from.redirected_to == request

返回值


resource_type

v1.9 之前新增 request.resource_type

包含渲染引擎识别的请求资源类型。ResourceType 可能为以下之一:documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

用法

request.resource_type

返回值


timing

v1.9 之前新增 request.timing

返回指定请求的资源时序信息。大多数时序值会在收到响应后可用,responseEnd 会在请求结束时可用。更多信息请参考 资源时序 API

用法

with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)

返回值

  • Dict#
    • startTime float

      请求开始的时间,单位为自 1970 年 1 月 1 日 00:00:00 UTC 起经过的毫秒数

    • domainLookupStart float

      浏览器开始进行资源域名解析前的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • domainLookupEnd float

      浏览器完成资源域名解析后的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • connectStart float

      用户代理开始与服务器建立连接以获取资源前的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • secureConnectionStart float

      浏览器开始为当前连接进行安全握手前的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • connectEnd float

      用户代理完成与服务器建立连接前的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • requestStart float

      浏览器开始向服务器、缓存或本地资源请求资源前的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • responseStart float

      浏览器收到来自服务器、缓存或本地资源的响应第一个字节后的时间。该值为相对于 startTime 的毫秒数,若不可用则为 -1。

    • responseEnd float

      浏览器收到资源最后一个字节或在传输连接关闭前的时间(以先到者为准)。该值为相对于 startTime 的毫秒数,若不可用则为 -1。


url

v1.9 之前新增 request.url

请求的 URL。

用法

request.url

返回值