跳到主要内容

APIRequestContext

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

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

Cookie 管理

browserContext.requestpage.request 返回的 APIRequestContext 与对应的 BrowserContext 共享 cookie 存储。每个 API 请求都会使用浏览器上下文中的值填充 Cookie 头。如果 API 响应包含 Set-Cookie 头,它将自动更新 BrowserContext 的 cookies,页面发起的请求将会使用这些 cookies。这意味着如果您使用此 API 登录,您的端到端测试也会保持登录状态,反之亦然。

如果您希望 API 请求不干扰浏览器 cookies,应通过调用 apiRequest.newContext() 创建新的 APIRequestContext。这样的 APIRequestContext 对象将拥有独立的 cookie 存储。


方法

delete

添加于: v1.16 apiRequestContext.delete

发送 HTTP(S) DELETE 请求并返回响应。该方法会从上下文中填充请求的 cookies,并根据响应更新上下文中的 cookies。该方法会自动跟随重定向。

用法

await apiRequestContext.delete(url);
await apiRequestContext.delete(url, options);

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选) 添加于: v1.17#

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

    • failOnStatusCode boolean (可选)#

      是否在响应码不是 2xx 和 3xx 时抛出异常。默认情况下,对于所有状态码都会返回响应对象。

    • form Object<string, string | number | boolean> | FormData (可选) 添加于: v1.17#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 添加于: v1.26#

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

    • maxRetries number (可选) 添加于: v1.46#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选) 添加于: v1.17#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 一起发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


dispose

添加于: v1.16 apiRequestContext.dispose

通过 apiRequestContext.get() 及类似方法返回的所有响应都存储在内存中,以便后续可以调用 apiResponse.body()。此方法会释放所有资源,在已释放的 APIRequestContext 上调用任何方法都将抛出异常。

用法

await apiRequestContext.dispose();
await apiRequestContext.dispose(options);

参数

  • options Object (可选)
    • reason string (可选) 添加于: v1.45#

      用于报告因上下文释放而中断操作的原因。

返回值


fetch

添加于: v1.16 apiRequestContext.fetch

发送 HTTP(S) 请求并返回响应。该方法会从上下文中获取请求 cookies 并根据响应更新上下文 cookies。该方法会自动跟随重定向。

用法

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

await request.fetch('https://example.com/api/createBook', {
method: 'post',
data: {
title: 'Book Title',
author: 'John Doe',
}
});

在请求体中发送文件的常见方式是使用 multipart/form-data 编码作为表单字段上传,通过指定 multipart 参数:

const form = new FormData();
form.set('name', 'John');
form.append('name', 'Doe');
// 发送两个同名的文件字段
form.append('file', new File(['console.log(2024);'], 'f1.js', { type: 'text/javascript' }));
form.append('file', new File(['hello'], 'f2.txt', { type: 'text/plain' }));
await request.fetch('https://example.com/api/uploadForm', {
multipart: form
});

参数

  • urlOrRequest string | Request#

    目标 URL 或用于获取所有参数的 Request 对象。

  • options Object (可选)

    • data string | Buffer | Serializable (可选)#

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

    • failOnStatusCode boolean (可选)#

      是否在响应码不是 2xx 和 3xx 时抛出异常。默认情况下会返回所有状态码的响应对象。

    • form Object<string, string | number | boolean> | FormData (可选)#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 添加于: v1.26#

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

    • maxRetries number (可选) 添加于: v1.46#

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

    • method string (可选)#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选)#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


get

添加于: v1.16 apiRequestContext.get

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

用法

请求参数可以通过 params 选项配置,它们会被序列化为 URL 查询参数:

// 以对象形式传递参数
await request.get('https://example.com/api/getText', {
params: {
'isbn': '1234',
'page': 23,
}
});

// 以 URLSearchParams 形式传递参数
const searchParams = new URLSearchParams();
searchParams.set('isbn', '1234');
searchParams.append('page', 23);
searchParams.append('page', 24);
await request.get('https://example.com/api/getText', { params: searchParams });

// 以字符串形式传递参数
const queryString = 'isbn=1234&page=23&page=24';
await request.get('https://example.com/api/getText', { params: queryString });

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选) 添加于: v1.26#

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

    • failOnStatusCode boolean (可选)#

      是否在响应状态码非 2xx 和 3xx 时抛出异常。默认情况下会返回所有状态码的响应对象。

    • form Object<string, string | number | boolean> | FormData (可选) 添加于: v1.26#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头会应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 添加于: v1.26#

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

    • maxRetries number (可选) 添加于: v1.46#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选) 添加于: v1.26#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


head

添加于: v1.16 apiRequestContext.head

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

用法

await apiRequestContext.head(url);
await apiRequestContext.head(url, options);

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选) 添加于: v1.26#

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

    • failOnStatusCode boolean (可选)#

      是否在响应状态码不是 2xx 和 3xx 时抛出异常。默认情况下会返回所有状态码的响应对象。

    • form Object<string, string | number | boolean> | FormData (可选) 添加于: v1.26#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 添加于: v1.26#

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

    • maxRetries number (可选) 添加于: v1.46#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选) 添加于: v1.26#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


patch

v1.16 版本新增 apiRequestContext.patch

发送 HTTP(S) PATCH 请求并返回响应。该方法会从上下文中填充请求的 cookies,并根据响应更新上下文中的 cookies。该方法会自动跟随重定向。

用法

await apiRequestContext.patch(url);
await apiRequestContext.patch(url, options);

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选)#

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

    • failOnStatusCode boolean (可选)#

      是否在响应码不是 2xx 和 3xx 时抛出错误。默认情况下,所有状态码都会返回响应对象。

    • form Object<string, string | number | boolean> | FormData (可选)#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) v1.26 版本新增#

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

    • maxRetries number (可选) v1.46 版本新增#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选)#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


post

新增于: v1.16 apiRequestContext.post

发送 HTTP(S) POST 请求并返回响应。该方法会从上下文中填充请求的 cookies,并根据响应更新上下文中的 cookies。该方法会自动跟随重定向。

用法

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

await request.post('https://example.com/api/createBook', {
data: {
title: 'Book Title',
author: 'John Doe',
}
});

要向服务器发送表单数据,请使用 form 选项。其值将以 application/x-www-form-urlencoded 编码格式编码到请求体中(如下所示如何使用 multipart/form-data 表单编码发送文件):

await request.post('https://example.com/api/findBook', {
form: {
title: 'Book Title',
author: 'John Doe',
}
});

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

const form = new FormData();
form.set('name', 'John');
form.append('name', 'Doe');
// 发送两个同名的文件字段。
form.append('file', new File(['console.log(2024);'], 'f1.js', { type: 'text/javascript' }));
form.append('file', new File(['hello'], 'f2.txt', { type: 'text/plain' }));
await request.post('https://example.com/api/uploadForm', {
multipart: form
});

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选)#

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

    • failOnStatusCode boolean (可选)#

      是否在响应码非 2xx 和 3xx 时抛出错误。默认情况下,所有状态码都会返回响应对象。

    • form Object<string, string | number | boolean> | FormData (可选)#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 新增于: v1.26#

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

    • maxRetries number (可选) 新增于: v1.46#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选)#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 一起发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回


put

添加于: v1.16 apiRequestContext.put

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

用法

await apiRequestContext.put(url);
await apiRequestContext.put(url, options);

参数

  • url string#

    目标 URL。

  • options Object (可选)

    • data string | Buffer | Serializable (可选)#

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

    • failOnStatusCode boolean (可选)#

      是否在响应码非 2xx 和 3xx 时抛出异常。默认情况下会返回所有状态码的响应对象。

    • form Object<string, string | number | boolean> | FormData (可选)#

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

    • headers Object<string, string> (可选)#

      允许设置 HTTP 头。这些头将应用于获取的请求以及由其发起的任何重定向。

    • ignoreHTTPSErrors boolean (可选)#

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

    • maxRedirects number (可选) 添加于: v1.26#

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

    • maxRetries number (可选) 添加于: v1.46#

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

    • multipart FormData | Object<string, string | number | boolean | ReadStream | Object> (可选)#

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

    • params Object<string, string | number | boolean> | URLSearchParams | string (可选)#

      随 URL 发送的查询参数。

    • timeout number (可选)#

      请求超时时间(毫秒)。默认为 30000(30 秒)。传递 0 表示禁用超时。

返回值


storageState

添加于: v1.16 apiRequestContext.storageState

返回此请求上下文的存储状态,包含当前 cookies 和本地存储快照(如果构造函数中传入了该参数)。

用法

await apiRequestContext.storageState();
await apiRequestContext.storageState(options);

参数

  • options Object (可选)
    • indexedDB boolean (可选) 添加于: v1.51#

      设置为 true 以在存储状态快照中包含 IndexedDB。

    • path string (可选)#

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

返回值