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

返回渲染引擎识别的资源类型,可能为 document、stylesheet、image、media、font、script、texttrack、xhr、fetch、eventsource、websocket、manifest 或 other。

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。