Skip to main content

Request

当页面向网络资源发起请求时,Page 会按以下顺序触发事件:

如果请求过程中发生失败,将不会触发 'requestfinished'(以及可能出现的 response),取而代之的是 page.on("requestfailed")

note

即使是 404、503 等 HTTP 错误状态,按照协议仍然属于成功响应,因此仍会触发 'requestfinished'

若请求收到重定向响应,则当前请求会以 'requestfinished' 结束,随后浏览器会根据重定向 URL 发起新的请求。

request.all_headers()

Added in: v1.15

返回包含该请求所有 HTTP 头的字典,头名统一为小写。

request.failure

Added in: v1.8

如果请求失败(通过 requestfailed 事件报告),返回失败原因,否则为 None

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

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

request.frame

Added in: v1.8

返回发起此请求的 Frame

request.header_value(name)

Added in: v1.15

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

request.headers

Added in: v1.8

返回请求头字典,头名小写。该方法不会返回安全相关头(例如 cookie),如需完整列表请使用 request.all_headers()

request.headers_array()

Added in: v1.15

以数组形式返回该请求的全部 HTTP 头。与 request.all_headers() 不同,该方法保留原始大小写。对于 Set-Cookie 等多值头,会有多条记录。

request.is_navigation_request()

Added in: v1.8

指示该请求是否导致所属 frame 导航。

request.method

Added in: v1.8

请求方法(如 GET、POST)。

request.post_data

Added in: v1.8

请求的 POST 正文内容(如果存在)。

request.post_data_buffer

Added in: v1.8

以二进制形式返回 POST 正文(如果存在)。

request.post_data_json

Added in: v1.8

解析 application/x-www-form-urlencoded 或 JSON 请求体并返回结构化结果(如果存在)。对表单类型返回键值对对象,否则尝试解析为 JSON。

request.redirected_from

Added in: v1.8

返回被服务器重定向到当前请求的上一跳请求(如果存在)。

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

request.redirected_to

Added in: v1.8

服务器返回重定向响应时,浏览器接着发送的下一跳请求。与 request.redirected_from 成对出现:

assert request.redirected_from.redirected_to == request

request.resource_type

Added in: v1.8

返回渲染引擎识别的资源类型,可能为 documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

request.response()

Added in: v1.8

返回匹配的 Response,如果由于错误未收到响应则为 None

request.sizes()

Added in: v1.15
  • 返回值: <Dict>#
    • requestBodySize <int> 请求正文(POST 负载)字节数,没有正文则为 0。
    • requestHeadersSize <int> 从 HTTP 请求开始到正文前 CRLF 的字节数。
    • responseBodySize <int> 接收的响应正文(解压后)字节数。
    • responseHeadersSize <int> 从 HTTP 响应开始到正文前 CRLF 的字节数。

返回该请求的资源体积信息。

request.timing

Added in: v1.8
  • 返回值: <Dict>#
    • startTime <float> 请求开始的 Unix 时间(秒)。
    • domainLookupStart <float> 浏览器开始 DNS 查询的相对秒数,不可用则为 -1。
    • domainLookupEnd <float> 浏览器完成 DNS 查询的相对秒数,不可用为 -1。
    • connectStart <float> 浏览器开始与服务器建立连接前的相对秒数,不可用为 -1。
    • secureConnectionStart <float> 浏览器开始 TLS 握手的相对秒数,不可用为 -1。
    • connectEnd <float> 浏览器完成连接建立后的相对秒数,不可用为 -1。
    • requestStart <float> 浏览器开始向服务器或缓存发起请求的相对秒数,不可用为 -1。
    • responseStart <float> 浏览器开始接收响应的相对秒数,不可用为 -1。
    • responseEnd <float> 浏览器接收最后一个字节或即将关闭连接时的相对秒数,不可用为 -1。

返回请求的时间线信息。大部分字段在收到响应后可用,responseEnd 在请求结束后出现。更多细节可参考 Resource Timing API

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

request.url

Added in: v1.8

返回请求的 URL。