跳至主要内容

APIRequestContext

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

每个 Playwright 浏览器上下文都与其关联 APIRequestContext 实例,该实例与浏览器上下文共享 Cookie 存储,并且可以通过 BrowserContext.request()Page.request() 访问。也可以通过调用 APIRequest.newContext() 手动创建一个新的 APIRequestContext 实例。

Cookie 管理

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

如果您希望 API 请求不干扰浏览器 Cookie,则应通过调用 APIRequest.newContext() 创建一个新的 APIRequestContext。此类 APIRequestContext 对象将拥有自己的隔离 Cookie 存储。


方法

delete

新增于:v1.16 apiRequestContext.delete

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

用法

APIRequestContext.delete(url);
APIRequestContext.delete(url, options);

参数

返回值


dispose

新增于:v1.16 apiRequestContext.dispose

APIRequestContext.get() 和类似方法返回的所有响应都存储在内存中,以便您以后可以调用 APIResponse.body()。此方法将其所有资源丢弃,在已丢弃的 APIRequestContext 上调用任何方法都将引发异常。

用法

APIRequestContext.dispose();
APIRequestContext.dispose(options);

参数

  • options ApiRequestContext.DisposeOptions (可选)
    • setReason String (可选)新增于:v1.45#

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

返回值


fetch

新增于:v1.16 apiRequestContext.fetch

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

用法

JSON 对象可以直接传递到请求中

Map<String, Object> data = new HashMap();
data.put("title", "Book Title");
data.put("body", "John Doe");
request.fetch("https://example.com/api/createBook", RequestOptions.create().setMethod("post").setData(data));

在请求正文中发送文件(s) 的常用方法是将它们作为表单字段上传,并使用 multipart/form-data 编码,方法是指定 multipart 参数

// Pass file path to the form data constructor:
Path file = Paths.get("team.csv");
APIResponse response = request.fetch("https://example.com/api/uploadTeamList",
RequestOptions.create().setMethod("post").setMultipart(
FormData.create().set("fileField", file)));

// Or you can pass the file content directly as FilePayload object:
FilePayload filePayload = new FilePayload("f.js", "text/javascript",
"console.log(2022);".getBytes(StandardCharsets.UTF_8));
APIResponse response = request.fetch("https://example.com/api/uploadScript",
RequestOptions.create().setMethod("post").setMultipart(
FormData.create().set("fileField", filePayload)));

参数

  • urlOrRequest String | Request#

    目标 URL 或 Request 以获取所有参数。

  • options RequestOptions (可选)新增于:v1.18#

    可选请求参数。

返回值


get

新增于:v1.16 apiRequestContext.get

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

用法

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

request.get("https://example.com/api/getText", RequestOptions.create()
.setQueryParam("isbn", "1234")
.setQueryParam("page", 23));

参数

返回值


head

新增于:v1.16 apiRequestContext.head

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

用法

APIRequestContext.head(url);
APIRequestContext.head(url, options);

参数

返回值


patch

新增于:v1.16 apiRequestContext.patch

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

用法

APIRequestContext.patch(url);
APIRequestContext.patch(url, options);

参数

返回值


post

新增于:v1.16 apiRequestContext.post

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

用法

JSON 对象可以直接传递到请求中

Map<String, Object> data = new HashMap();
data.put("title", "Book Title");
data.put("body", "John Doe");
request.post("https://example.com/api/createBook", RequestOptions.create().setData(data));

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

request.post("https://example.com/api/findBook", RequestOptions.create().setForm(
FormData.create().set("title", "Book Title").set("body", "John Doe")
));

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

// Pass file path to the form data constructor:
Path file = Paths.get("team.csv");
APIResponse response = request.post("https://example.com/api/uploadTeamList",
RequestOptions.create().setMultipart(
FormData.create().set("fileField", file)));

// Or you can pass the file content directly as FilePayload object:
FilePayload filePayload1 = new FilePayload("f1.js", "text/javascript",
"console.log(2022);".getBytes(StandardCharsets.UTF_8));
APIResponse response = request.post("https://example.com/api/uploadScript",
RequestOptions.create().setMultipart(
FormData.create().set("fileField", filePayload)));

参数

返回值


put

新增于:v1.16 apiRequestContext.put

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

用法

APIRequestContext.put(url);
APIRequestContext.put(url, options);

参数

返回值


storageState

新增于:v1.16 apiRequestContext.storageState

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

用法

APIRequestContext.storageState();
APIRequestContext.storageState(options);

参数

  • options ApiRequestContext.StorageStateOptions (可选)
    • setPath Path (可选)#

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

返回值