跳至主要内容

APIRequestContext

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

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

Cookie 管理

APIRequestContextBrowserContext.APIRequestPage.APIRequest 返回,与相应的 BrowserContext 共享 cookie 存储。每个 API 请求都会有 Cookie 标头,其中包含来自浏览器上下文的。如果 API 响应包含 Set-Cookie 标头,它将自动更新 BrowserContext cookies,并从页面发出的请求将获取这些 cookies。这意味着,如果您使用此 API 登录,您的 e2e 测试将登录,反之亦然。

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


方法

CreateFormData

添加于:v1.23 apiRequestContext.CreateFormData

创建一个新的 FormData 实例,该实例用于在发出 HTTP 请求时提供表单和多部分数据。

用法

ApiRequestContext.CreateFormData

返回


DeleteAsync

添加于:v1.16 apiRequestContext.DeleteAsync

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

用法

await ApiRequestContext.DeleteAsync(url, options);

参数

  • url string#

    目标 URL。

  • options ApiRequestContextDeleteOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)添加于:v1.17#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)添加于:v1.17#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)添加于:v1.17#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


DisposeAsync

添加于:v1.16 apiRequestContext.DisposeAsync

ApiRequestContext.GetAsync() 及类似方法返回的所有响应都存储在内存中,以便您稍后调用 ApiResponse.BodyAsync()。此方法将丢弃所有其资源,在已处置的 APIRequestContext 上调用任何方法都会抛出异常。

用法

await ApiRequestContext.DisposeAsync(options);

参数

  • options ApiRequestContextDisposeOptions? (可选)
    • Reason string? (可选)添加于:v1.45#

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

返回


FetchAsync

添加于:v1.16 apiRequestContext.FetchAsync

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

用法

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

var data = new Dictionary<string, object>() {
{ "title", "Book Title" },
{ "body", "John Doe" }
};
await Request.FetchAsync("https://example.com/api/createBook", new() { Method = "post", DataObject = data });

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

var file = new FilePayload()
{
Name = "f.js",
MimeType = "text/javascript",
Buffer = System.Text.Encoding.UTF8.GetBytes("console.log(2022);")
};
var multipart = Context.APIRequest.CreateFormData();
multipart.Set("fileField", file);
await Request.FetchAsync("https://example.com/api/uploadScript", new() { Method = "post", Multipart = multipart });

参数

  • urlOrRequest string | Request#

    目标 URL 或 Request,用于获取所有参数。

  • options ApiRequestContextFetchOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Method string? (可选)#

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

    • Multipart FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


GetAsync

添加于:v1.16 apiRequestContext.GetAsync

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

用法

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

var queryParams = new Dictionary<string, object>()
{
{ "isbn", "1234" },
{ "page", 23 },
};
await request.GetAsync("https://example.com/api/getText", new() { Params = queryParams });

参数

  • url string#

    目标 URL。

  • options ApiRequestContextGetOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)添加于:v1.26#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)添加于:v1.26#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)添加于:v1.26#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


HeadAsync

添加于:v1.16 apiRequestContext.HeadAsync

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

用法

await ApiRequestContext.HeadAsync(url, options);

参数

  • url string#

    目标 URL。

  • options ApiRequestContextHeadOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)添加于:v1.26#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)添加于:v1.26#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)添加于:v1.26#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


PatchAsync

添加于:v1.16 apiRequestContext.PatchAsync

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

用法

await ApiRequestContext.PatchAsync(url, options);

参数

  • url string#

    目标 URL。

  • options ApiRequestContextPatchOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


PostAsync

添加于:v1.16 apiRequestContext.PostAsync

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

用法

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

var data = new Dictionary<string, object>() {
{ "firstName", "John" },
{ "lastName", "Doe" }
};
await request.PostAsync("https://example.com/api/createBook", new() { DataObject = data });

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

var formData = Context.APIRequest.CreateFormData();
formData.Set("title", "Book Title");
formData.Set("body", "John Doe");
await request.PostAsync("https://example.com/api/findBook", new() { Form = formData });

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

var file = new FilePayload()
{
Name = "f.js",
MimeType = "text/javascript",
Buffer = System.Text.Encoding.UTF8.GetBytes("console.log(2022);")
};
var multipart = Context.APIRequest.CreateFormData();
multipart.Set("fileField", file);
await request.PostAsync("https://example.com/api/uploadScript", new() { Multipart = multipart });

参数

  • url string#

    目标 URL。

  • options ApiRequestContextPostOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


PutAsync

添加于:v1.16 apiRequestContext.PutAsync

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

用法

await ApiRequestContext.PutAsync(url, options);

参数

  • url string#

    目标 URL。

  • options ApiRequestContextPutOptions? (可选)

    • Data|DataByte|DataObject string? | byte[]? | [object]? (可选)#

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

    • FailOnStatusCode bool? (可选)#

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

    • Form FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Headers IDictionary?<string, string> (可选)#

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

    • IgnoreHTTPSErrors bool? (可选)#

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

    • MaxRedirects int? (可选)添加于:v1.26#

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

    • MaxRetries int? (可选)添加于:v1.46#

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

    • Multipart FormData? (可选)#

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

      可以通过 ApiRequestContext.CreateFormData 创建 FormData 实例。

    • Params IDictionary?<string, [object]> (可选)#

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

    • ParamsString string? (可选)添加于:v1.47#

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

    • Timeout [float]? (可选)#

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

返回


StorageStateAsync

添加于:v1.16 apiRequestContext.StorageStateAsync

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

用法

await ApiRequestContext.StorageStateAsync(options);

参数

  • options ApiRequestContextStorageStateOptions? (可选)
    • Path string? (可选)#

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

返回