Request
每当页面发送网络资源请求时,Page 会发出以下事件序列
- page.on("request"):当页面发出请求时触发。
- page.on("response"):当请求收到响应状态和头部时触发。
- page.on("requestfinished"):当响应体下载完成且请求完成时触发。
如果请求在某个时候失败,那么会触发 page.on("requestfailed") 事件,而不是 'requestfinished'
事件(也可能不是 'response' 事件)。
从 HTTP 的角度来看,HTTP 错误响应(如 404 或 503)仍然是成功的响应,因此请求将以 'requestfinished'
事件完成。
如果请求收到 'redirect' 响应,该请求会以 requestfinished 事件成功完成,并向重定向的 URL 发出新的请求。
方法
all_headers
添加于:v1.15一个包含与此请求关联的所有请求 HTTP 头部信息的对象。头部名称已转换为小写。
用法
request.all_headers()
返回
header_value
添加于:v1.15返回与名称匹配的头部的值。名称不区分大小写。
用法
request.header_value(name)
参数
返回
headers_array
添加于:v1.15一个包含与此请求关联的所有请求 HTTP 头部信息的数组。与 request.all_headers() 不同,头部名称未转换为小写。具有多个条目的头部(例如 Set-Cookie
)会在数组中出现多次。
用法
request.headers_array()
返回
response
添加于 v1.9 之前返回匹配的 Response 对象,如果由于错误未收到响应,则返回 null
。
用法
request.response()
返回
sizes
添加于:v1.15返回给定请求的资源大小信息。
用法
request.sizes()
返回
属性
failure
添加于 v1.9 之前除非此请求失败(由 requestfailed 事件报告),否则此方法返回 null
。
用法
记录所有失败请求的示例
page.on("requestfailed", lambda request: print(request.url + " " + request.failure))
返回
frame
添加于 v1.9 之前返回发起此请求的 Frame。
用法
frame_url = request.frame.url
返回
详细信息
请注意,在某些情况下 frame 不可用,此时该方法将抛出异常。
- 当请求源自 Service Worker 时。您可以使用
request.serviceWorker()
进行检查。 - 在创建对应的 frame 之前发出导航请求时。您可以使用 request.is_navigation_request() 进行检查。
这是一个处理所有情况的示例
headers
添加于 v1.9 之前一个包含请求 HTTP 头部信息的对象。头部名称已转换为小写。请注意,此方法不返回安全相关的头部信息,包括与 cookie 相关的头部。您可以使用 request.all_headers() 获取包含 cookie 信息的完整头部列表。
用法
request.headers
返回
is_navigation_request
添加于 v1.9 之前此请求是否正在驱动 frame 的导航。
有些导航请求在创建对应的 frame 之前发出,因此 request.frame 不可用。
用法
request.is_navigation_request()
返回
method
添加于 v1.9 之前请求的方法 (GET, POST 等)
用法
request.method
返回
post_data
添加于 v1.9 之前请求的 post body,如果有的话。
用法
request.post_data
返回
post_data_buffer
添加于 v1.9 之前请求的二进制 post body,如果有的话。
用法
request.post_data_buffer
返回
post_data_json
添加于 v1.9 之前返回解析后的请求体,对于 form-urlencoded 格式会进行解析,否则(作为备用)会尝试解析为 JSON。
当响应为 application/x-www-form-urlencoded
时,将返回一个包含键/值对的对象。否则将解析为 JSON。
用法
request.post_data_json
返回
redirected_from
添加于 v1.9 之前如果存在,返回服务器重定向到当前请求的那个请求。
当服务器响应重定向时,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"
response = await 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
response = await page.goto("https://google.com")
print(response.request.redirected_from) # None
返回
redirected_to
添加于 v1.9 之前如果服务器响应重定向,浏览器会发出新的请求,此方法返回该新请求。
用法
此方法与 request.redirected_from 方法相反
assert request.redirected_from.redirected_to == request
返回
resource_type
添加于 v1.9 之前包含渲染引擎感知到的请求资源类型。ResourceType 将是以下之一:document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
。
用法
request.resource_type
返回
timing
添加于 v1.9 之前返回给定请求的资源计时信息。大多数计时值在收到响应时可用,responseEnd
在请求完成时可用。更多信息请参阅 Resource Timing API。
用法
- 同步
- 异步
with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)
async with page.expect_event("requestfinished") as request_info:
await page.goto("http://example.com")
request = await 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 之前请求的 URL。
用法
request.url
返回