跳到主要内容

APIRequestContext

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

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

Cookie 管理

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

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


方法

delete

添加于版本: v1.16 apiRequestContext.delete

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

用法

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-type 及其内容的文件类对象传递。

    • 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) 请求并返回其响应。 此方法将从上下文中填充请求 Cookie,并从响应中更新上下文 Cookie。 此方法将自动跟踪重定向。

用法

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');
// Send two file fields with the same name.
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-type 及其内容的文件类对象传递。

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

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

    • timeout number (可选)#

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

返回值


get

添加于版本: v1.16 apiRequestContext.get

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

用法

请求参数可以使用 params 选项配置,它们将被序列化到 URL 查询参数中

// Passing params as object
await request.get('https://example.com/api/getText', {
params: {
'isbn': '1234',
'page': 23,
}
});

// Passing params as 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 });

// Passing params as string
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 请求并返回其响应。 此方法将从上下文中填充请求 Cookie,并从响应中更新上下文 Cookie。 此方法将自动跟踪重定向。

用法

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 请求并返回其响应。 此方法将从上下文中填充请求 Cookie,并从响应中更新上下文 Cookie。 此方法将自动跟踪重定向。

用法

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-type 及其内容的文件类对象传递。

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

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

    • timeout number (可选)#

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

返回值


post

添加于版本: v1.16 apiRequestContext.post

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

用法

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');
// Send two file fields with the same name.
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-type 及其内容的文件类对象传递。

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

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

    • timeout number (可选)#

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

返回值


put

添加于版本: v1.16 apiRequestContext.put

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

用法

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

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

用法

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

参数

  • options Object (可选)
    • path string (可选)#

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

返回值