一、创建APIRequestContex实例
# 连接到 APIRequest,可用于 Web API 测试的 API。
myRequest = myPlaywright.request
# 创建APIRequestContext实例,该实例可用于发送 Web 请求
myRequestContext = myRequest.new_context()
myRequest.new_context(**kwargs)
base_url :<str> myRequestContext.get(url, **kwargs)等方法通过使用构造函数构建相应的 URL 来考虑基本URL。示例:
- baseURL:http://localhost:3000并向/bar.html结果发送请求http://localhost:3000/bar.html
- baseURL:http://localhost:3000/foo/并向./bar.html结果发送请求http://localhost:3000/foo/bar.html
- baseURL:http://localhost:3000/foo不带斜杠,并导航到./bar.html结果http://localhost:3000/bar.html
extra_http_headers: < Dict [ str , str ] >包含要随每个请求一起发送的附加 HTTP 标头的对象。
http_credentials: <字典> HTTP 身份验证的凭据。
- username: < str >
- password: < str >
ignore_https_errors: < bool >发送网络请求时是否忽略 HTTPS 错误。默认为false.
proxy: <字典>网络代理设置。
- server: < str >用于所有请求的代理。支持 HTTP 和 SOCKS 代理,例如http://myproxy.com:3128或socks5: //myproxy.com:3128. 短格式myproxy.com:3128被视为 HTTP 代理。
- bypass: < str >可选的以逗号分隔的域以绕过代理,例如".com, chromium.org, .domain.com"
- username: < str > HTTP 代理需要身份验证时使用的可选用户名。
- password: < str > HTTP 代理需要身份验证时使用的可选密码。
storage_state: <联合[ str , pathlib.Path ] | Dict >使用给定的存储状态填充上下文。此选项可用于使用通过browser_context.storage_state(**kwargs)或myRequestContext.storage_state(**kwargs)获得的登录信息初始化上下文,保存存储的文件的路径 or 返回的值。
- cookies: <List[Dict]>
- sameSite <"Strict"|"Lax"|"None">
- secure: <bool>
- httpOnly: <bool>
- expires: < float > Unix 时间,以秒为单位。
- path: < str >
- domain: < str >
- value: < str >
- name: < str >
- origins <List[Dict]>
- origin < str >
- localStorage <List[Dict]>
- name < str >
- value < str >
timeout < float >等待响应的最长时间(以毫秒为单位)。默认为30000(30 秒)。通过0禁用超时。
user_agent < str >在此上下文中使用的特定用户代理。
二、发送api请求
myBrowserContext .request和 myPage.request返回的 APIRequestContext与对应的 BrowserContext共享 cookie 存储。每个 API 请求都将使用浏览器上下文中的值填充标头。如果 API 响应包含标头,它将自动更新 BrowserContext cookie,并且从页面发出的请求将获取它们。这意味着如果您使用此 API 登录,您的 e2e 测试将被登录,反之亦然。
如果您希望 API 请求不干扰浏览器 cookie,您应该通过调用myRequest.new_context(**kwargs)创建一个新的 APIRequestContext。这样的对象将有自己独立的 cookie 存储。
# 发送 api 请求
response = myRequestContext.get("https://example.com/user/repos")
- myRequestContext.get(url, **kwargs)
- myRequestContext.post(url, **kwargs)
- myRequestContext.put(url, **kwargs)
- myRequestContext.delete(url, **kwargs)
- myRequestContext.head(url, **kwargs)
- myRequestContext.patch(url, **kwargs)
- myRequestContext.fetch(url_or_request, **kwargs)
- myRequestContext.dispose()
myRequestContext.get(url, **kwargs)和类似方法返回的所有响应都存储在内存中,以便您以后可以调用api_response.body()。此方法丢弃所有存储的响应,并使api_response.body()抛出“响应已处置”错误。
- myRequestContext.storage_state(**kwargs)
- path < Union [ str , pathlib.Path ] >保存存储状态的文件路径。如果path是相对路径,则相对于当前工作目录进行解析。如果未提供路径,仍会返回存储状态,但不会保存到磁盘。#
- 返回: <Dict>
- cookies: <List[Dict]>
- name: < str >
- value: < str >
- domain: < str >
- path: < str >
- expires: < float > Unix 时间,以秒为单位。
- httpOnly: <bool>
- secure: <bool>
- sameSite <"Strict"|"Lax"|"None">
- origins <List[Dict]>
- origin < str >
- localStorage <List[Dict]>
- name < str >
- value < str >
- cookies: <List[Dict]>
返回此请求上下文的存储状态,如果它被传递给构造函数,则包含当前 cookie 和本地存储快照。
三、获取api响应
由myRequestContext.get(url, **kwargs)和类似方法返回的响应。
# 发送 api 请求
response = myRequestContext.get("https://example.com/user/repos")
# <bytes> 返回带有响应正文的缓冲区。
response.body()
# <Dict[str, str]> 具有与此响应关联的所有响应 HTTP 标头的对象。
response.headers
# <List[Dict]> 包含与此响应关联的所有请求 HTTP 标头的数组。标题名称不是小写的。具有多个条目的标题,例如Set-Cookie,多次出现在数组中。
response.headers_array
# <Serializable> <可序列化> 返回响应正文的 JSON 表示。如果响应主体无法通过 解析,则此方法将抛出JSON.parse。
response.json()
# <bool> 包含一个布尔值,说明响应是否成功(状态在 200-299 范围内)。
response.ok
# < int > 包含响应的状态代码(例如,200 表示成功)。
response.status
# < str > 包含响应的状态文本(例如,通常是成功的“OK”)。
response.status_text
# < str > 返回响应正文的文本表示。
response.text()
# < str > 包含响应的 URL。
response.url
# 处理此响应的正文。如果未调用,则正文将保留在内存中,直到上下文关闭。
response.dispose()