跳至主要内容

APIRequestContext

此 API 用于 Web API 测试。您可以使用它来触发 API 端点,配置微服务,准备环境或服务以进行端到端测试。

每个 Playwright 浏览器上下文都与其关联 APIRequestContext 实例,该实例与浏览器上下文共享 cookie 存储,可以通过 browser_context.requestpage.request 访问。还可以通过调用 api_request.new_context() 手动创建新的 APIRequestContext 实例。

Cookie 管理

APIRequestContextbrowser_context.requestpage.request 返回,它与相应的 BrowserContext 共享 cookie 存储。每个 API 请求都会使用来自浏览器上下文的 Cookie 标头填充。如果 API 响应包含 Set-Cookie 标头,它将自动更新 BrowserContext cookie,并且从页面发出的请求将获取它们。这意味着,如果您使用此 API 登录,则您的端到端测试将登录,反之亦然。

如果希望 API 请求不干扰浏览器 cookie,则应通过调用 api_request.new_context() 创建新的 APIRequestContext。此类 APIRequestContext 对象将具有其自己的隔离的 cookie 存储。

import os
from playwright.sync_api import sync_playwright

REPO = "test-repo-1"
USER = "github-username"
API_TOKEN = os.getenv("GITHUB_API_TOKEN")

with sync_playwright() as p:
# This will launch a new browser, create a context and page. When making HTTP
# requests with the internal APIRequestContext (e.g. `context.request` or `page.request`)
# it will automatically set the cookies to the browser page and vice versa.
browser = p.chromium.launch()
context = browser.new_context(base_url="https://api.github.com")
api_request_context = context.request
page = context.new_page()

# Alternatively you can create a APIRequestContext manually without having a browser context attached:
# api_request_context = p.request.new_context(base_url="https://api.github.com")


# Create a repository.
response = api_request_context.post(
"/user/repos",
headers={
"Accept": "application/vnd.github.v3+json",
# Add GitHub personal access token.
"Authorization": f"token {API_TOKEN}",
},
data={"name": REPO},
)
assert response.ok
assert response.json()["name"] == REPO

# Delete a repository.
response = api_request_context.delete(
f"/repos/{USER}/{REPO}",
headers={
"Accept": "application/vnd.github.v3+json",
# Add GitHub personal access token.
"Authorization": f"token {API_TOKEN}",
},
)
assert response.ok
assert await response.body() == '{"status": "ok"}'

方法

delete

新增于:v1.16 apiRequestContext.delete

发送 HTTP(S) DELETE 请求并返回其响应。该方法将使用来自上下文的请求 cookie 来填充,并使用来自响应的上下文 cookie 来更新。该方法将自动跟随重定向。

用法

api_request_context.delete(url)
api_request_context.delete(url, **kwargs)

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)新增于:v1.17#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)新增于:v1.17#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)新增于:v1.17#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


dispose

新增于:v1.16 apiRequestContext.dispose

api_request_context.get() 及类似方法返回的所有响应都存储在内存中,以便您以后可以调用 api_response.body()。此方法将丢弃所有资源,对已处置的 APIRequestContext 调用任何方法将抛出异常。

用法

api_request_context.dispose()
api_request_context.dispose(**kwargs)

参数

  • reason str (可选)新增于:v1.45#

    要向由上下文处置中断的操作报告的原因。

返回


fetch

新增于:v1.16 apiRequestContext.fetch

发送 HTTP(S) 请求并返回其响应。该方法将使用来自上下文的请求 cookie 来填充,并使用来自响应的上下文 cookie 来更新。该方法将自动跟随重定向。

用法

JSON 对象可以直接传递给请求

data = {
"title": "Book Title",
"body": "John Doe",
}
api_request_context.fetch("https://example.com/api/createBook", method="post", data=data)

通过指定 multipart 参数,将文件上传为具有 multipart/form-data 编码的表单字段,是将文件发送到请求主体中的常用方式。

api_request_context.fetch(
"https://example.com/api/uploadScript", method="post",
multipart={
"fileField": {
"name": "f.js",
"mimeType": "text/javascript",
"buffer": b"console.log(2022);",
},
})

参数

  • url_or_request str | Request#

    获取所有参数的目标 URL 或请求。

  • data str | bytes | 可序列化 (可选)#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • method str (可选)#

    如果设置,则更改获取方法(例如 PUTPOST)。如果未指定,则使用 GET 方法。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


get

新增于:v1.16 apiRequestContext.get

发送 HTTP(S) GET 请求并返回其响应。该方法将从上下文填充请求 cookie,并从响应更新上下文 cookie。该方法将自动跟随重定向。

用法

请求参数可以使用 params 选项进行配置,它们将被序列化为 URL 搜索参数

query_params = {
"isbn": "1234",
"page": "23"
}
api_request_context.get("https://example.com/api/getText", params=query_params)

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)新增于:v1.26#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)新增于:v1.26#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)新增于:v1.26#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


head

新增于:v1.16 apiRequestContext.head

发送 HTTP(S) HEAD 请求并返回其响应。该方法将从上下文填充请求 cookie,并从响应更新上下文 cookie。该方法将自动跟随重定向。

用法

api_request_context.head(url)
api_request_context.head(url, **kwargs)

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)新增于:v1.26#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)新增于:v1.26#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)新增于:v1.26#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


patch

新增于:v1.16 apiRequestContext.patch

发送 HTTP(S) PATCH 请求并返回其响应。该方法将从上下文填充请求 cookie,并从响应更新上下文 cookie。该方法将自动跟随重定向。

用法

api_request_context.patch(url)
api_request_context.patch(url, **kwargs)

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


post

新增于:v1.16 apiRequestContext.post

发送 HTTP(S) POST 请求并返回其响应。该方法将从上下文填充请求 Cookie,并从响应更新上下文 Cookie。该方法将自动跟随重定向。

用法

JSON 对象可以直接传递给请求

data = {
"title": "Book Title",
"body": "John Doe",
}
api_request_context.post("https://example.com/api/createBook", data=data)

要将表单数据发送到服务器,请使用 form 选项。其值将使用 application/x-www-form-urlencoded 编码编码到请求主体中(参见下面如何使用 multipart/form-data 表单编码发送文件)

formData = {
"title": "Book Title",
"body": "John Doe",
}
api_request_context.post("https://example.com/api/findBook", form=formData)

发送请求主体中文件(s)的常用方式是将它们作为表单字段上传,并使用 multipart/form-data 编码。使用 [FormData] 构造请求主体并将其作为 multipart 参数传递给请求。

api_request_context.post(
"https://example.com/api/uploadScript'",
multipart={
"fileField": {
"name": "f.js",
"mimeType": "text/javascript",
"buffer": b"console.log(2022);",
},
})

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


put

新增于:v1.16 apiRequestContext.put

发送 HTTP(S) PUT 请求并返回其响应。该方法将从上下文填充请求 Cookie,并从响应更新上下文 Cookie。该方法将自动跟随重定向。

用法

api_request_context.put(url)
api_request_context.put(url, **kwargs)

参数

  • url str#

    目标 URL。

  • data str | bytes | 可序列化 (可选)#

    允许设置请求的发布数据。如果 data 参数是对象,它将被序列化为 json 字符串,并且如果未显式设置,content-type 标头将设置为 application/json。否则,如果未显式设置,content-type 标头将设置为 application/octet-stream

  • fail_on_status_code bool (可选)#

    是否在响应代码不为 2xx 和 3xx 时抛出。默认情况下,响应对象将针对所有状态代码返回。

  • form Dict[str, str | float | bool] (可选)#

    提供一个将使用 application/x-www-form-urlencoded 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 application/x-www-form-urlencoded,除非显式提供。

  • headers Dict[str, str] (可选)#

    允许设置 HTTP 标头。这些标头将适用于获取的请求以及由其启动的任何重定向。

  • ignore_https_errors bool (可选)#

    是否在发送网络请求时忽略 HTTPS 错误。默认为 false

  • max_redirects int (可选)新增于:v1.26#

    将自动跟随的请求重定向的最大数量。如果超过数量,将抛出错误。默认为 20。传递 0 表示不跟随重定向。

  • max_retries int (可选)新增于:v1.46#

    网络错误应重试的最大次数。目前仅重试 ECONNRESET 错误。不会根据 HTTP 响应代码重试。如果超过限制,将抛出错误。默认为 0 - 不重试。

  • multipart Dict[str, str | float | bool | [ReadStream] | Dict] (可选)#

    • name str

      文件名

    • mimeType str

      文件类型

    • buffer bytes

      文件内容

    提供一个将使用 multipart/form-data 编码序列化为 html 表单并作为此请求主体发送的对象。如果指定了此参数,则 content-type 标头将设置为 multipart/form-data,除非显式提供。文件值可以作为包含文件名、mime 类型及其内容的文件类对象传递。

  • params Dict[str, str | float | bool] | str (可选)#

    要与 URL 一起发送的查询参数。

  • timeout float (可选)#

    请求超时(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回


storage_state

新增于:v1.16 apiRequestContext.storage_state

返回此请求上下文的存储状态,包含当前 Cookie 和本地存储快照(如果它已传递给构造函数)。

用法

api_request_context.storage_state()
api_request_context.storage_state(**kwargs)

参数

  • path Union[str, pathlib.Path] (可选)#

    用于保存存储状态的文件路径。如果 路径 是相对路径,则它将相对于当前工作目录解析。如果未提供路径,则仍会返回存储状态,但不会保存到磁盘。

返回