跳转到内容
搜索文档

发起 API 调用

最后更新 查看 MarkdownAgent 设置

创建 API 令牌后,所有 API 请求都以相同方式进行授权。Cloudflare 使用 RFC 标准 Authorization: Bearer <API_TOKEN> 接口。下面展示了一个示例请求。

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID" \
--header "Authorization: Bearer YQSn-xWAQiiEh9qM58wZNnyQS7FUdoqGIUAbrh7T"

切勿以明文形式发送或存储 API 令牌密钥。也请勿将其提交到代码仓库,尤其是公共仓库。

建议为 zone 或账户 ID 以及身份验证凭证(例如 API 令牌)定义环境变量

要在命令行中格式化 JSON 输出以提高可读性,可以使用 jq 等命令行 JSON 处理工具。有关获取和安装 jq 的更多信息,请参阅 Download jq

以下示例将使用 jq 格式化 curl 的 JSON 输出:

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq .

使用 Cloudflare API

每个 Cloudflare API 元素都绑定到特定的版本号。最新版本为 Version 4。所有 Version 4 HTTPS 端点的稳定基础 URL 为:https://api.cloudflare.com/client/v4/

有关发起 API 调用的具体指导,请参阅以下资源:

查询参数

多个 Cloudflare 端点具有可选的查询参数来筛选返回结果,例如 List Zones

添加这些查询参数时,请确保将 URL 用双引号 "" 括起来(与请求头值一样),否则 API 调用可能会出错。

curl "https://api.cloudflare.com/client/v4/zones?account.id=$ACCOUNT_ID" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

您可以使用单引号 ('') 或双引号 ("") 来括住字符串。但是,在 bash 等 shell 中使用单引号会阻止变量替换。在上面的示例中,这意味着 $ACCOUNT_ID$CLOUDFLARE_API_TOKEN 环境变量不会被替换为它们的值。

分页

有时结果过多,无法通过默认页面大小显示,例如您可能会收到以下内容:

"count": 1,
"page": 1,
"per_page": 20,
"total_count": 200,

存在两个查询参数选项,可以组合使用以分页浏览结果。

  • page=x 使您能够选择特定页面。
  • per_page=xx 使您能够调整每页显示的结果数量。如果选择过多,可能会超时。

示例可能是 https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?per_page=100&page=2

其他选项包括:

  • order:选择排序依据的属性。
  • directionASC(升序)或 DESC(降序)。

可用选项将在 API 文档中所有端点的 result_info 末尾列出。

在 Windows 上发起 API 调用

最新版本的 Windows 10 和 11 已包含开发者文档 API 示例中使用的 curl 工具。如果您使用的是其他 Windows 版本,请参阅 curl 网站上的 Windows downloads 了解获取和安装该工具的更多信息。

使用命令提示符窗口

要在命令提示符窗口中使用 curl 调用 Cloudflare API,必须使用双引号 (") 作为字符串分隔符。

典型的 PATCH 请求类似于以下内容:

C:\>curl --request PATCH "https://api.cloudflare.com/client/v4/user/invites/{id}" --header "X-Auth-Email: <EMAIL>" --header "X-Auth-Key: <API_KEY>" --data "{""status"": ""accepted""}"

要在请求体中转义双引号字符(例如,在 POST/PATCH 请求中使用 -d--data 指定的请求体),请在其前面添加另一个双引号 (") 或反斜杠 (\)。

要将单个命令拆分为两行或多行,请在一行末尾使用 ^ 作为行继续符:

C:\>curl --request PATCH ^
"https://api.cloudflare.com/client/v4/user/invites/{id}" ^
--header "X-Auth-Email: <EMAIL>" ^
--header "X-Auth-Key: <API_KEY>" ^
--data "{""status"": ""accepted""}"

使用 PowerShell

PowerShell 具有用于发起 REST API 调用和处理 JSON 响应的专用 cmdlet(Invoke-RestMethodConvertFrom-Json)。这些 cmdlet 的语法与开发者文档中提供的 curl 示例不同。

以下示例使用 Invoke-RestMethod cmdlet:

Invoke-RestMethod -URI "https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID/ssl/certificate_packs?ssl_status=all" -Method 'GET' -Headers @{'X-Auth-Email'=$Env:CLOUDFLARE_EMAIL;'X-Auth-Key'=$Env:CLOUDFLARE_API_KEY}
result      : {@{id=78411cfa-5727-4dc1-8d4a-773d01f17c7c; type=universal; hosts=System.Object[];
              primary_certificate=c173c8a1-9724-4e96-a748-2c4494186098; status=active; certificates=System.Object[];
              created_on=2022-12-09T23:11:06.010263Z; validity_days=90; validation_method=txt;
              certificate_authority=lets_encrypt}}
result_info : @{page=1; per_page=20; total_pages=1; count=1; total_count=1}
success     : True
errors      : {}
messages    : {}

该命令假设环境变量 ZONE_IDCLOUDFLARE_EMAILCLOUDFLARE_API_KEY 已预先定义。有关更多信息,请参阅环境变量

默认情况下,输出仅包含 JSON 对象层次结构的第一级(在上面的示例中,不会显示 hostscertificates 等对象的内容)。要像 jq 工具一样显示更多层级并格式化输出,可以使用 ConvertFrom-Json cmdlet 指定所需的最大深度(默认为 2):

Invoke-RestMethod -URI "https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID/ssl/certificate_packs?ssl_status=all" -Method 'GET' -Headers @{'X-Auth-Email'=$Env:CLOUDFLARE_EMAIL;'X-Auth-Key'=$Env:CLOUDFLARE_API_KEY} | ConvertTo-Json -Depth 5
{
	"result": [
		{
			"id": "78411cfa-5727-4dc1-8d4a-773d01f17c7c",
			"type": "universal",
			"hosts": ["*.example.com", "example.com"],
			"primary_certificate": "c173c8a1-9724-4e96-a748-2c4494186098",
			"status": "active",
			"certificates": [
				{
					"id": "c173c8a1-9724-4e96-a748-2c4494186098",
					"hosts": ["*.example.com", "example.com"],
					"issuer": "LetsEncrypt",
					"signature": "ECDSAWithSHA384",
					"status": "active",
					"bundle_method": "ubiquitous",
					"zone_id": "<ZONE_ID>",
					"uploaded_on": "2023-02-02T11:20:25.403338Z",
					"modified_on": "2022-12-08T00:26:15.577555Z",
					"expires_on": "2023-03-07T23:26:12.000000Z",
					"priority": null
				}
			],
			"created_on": "2022-12-09T23:11:06.010263Z",
			"validity_days": 90,
			"validation_method": "txt",
			"certificate_authority": "lets_encrypt"
		}
	]
	// (...)
}

您也可以在 PowerShell 中使用 curl 工具。但是,在 PowerShell 中 curlInvoke-WebRequest cmdlet 的别名,其语法与常规 curl 工具不同。要使用 curl,请输入 curl.exe

使用 curl 的典型 PATCH 请求类似于以下内容:

curl.exe --request PATCH "https://api.cloudflare.com/client/v4/user/invites/{id}" --header "Authorization: Bearer $Env:CLOUDFLARE_API_TOKEN" --data '{\"status\": \"accepted\"}'

要在请求体(使用 -d--data 指定)中转义双引号 (") 字符,请在其前面添加另一个双引号 (") 或反斜杠 (\)。即使使用单引号 (') 作为字符串分隔符,也必须转义双引号。

要将单个命令拆分为两行或多行,请在一行末尾使用反引号 (`) 作为行继续符:

curl.exe --request PATCH `
"https://api.cloudflare.com/client/v4/user/invites/{id}" `
--header "X-Auth-Email: $Env:CLOUDFLARE_EMAIL" `
--header "X-Auth-Key: $Env:CLOUDFLARE_API_KEY" `
--data '{\"status\": \"accepted\"}'

环境变量

您可以为在命令之间重复使用的值定义环境变量,例如 zone 或账户 ID。环境变量的生命周期可以是当前 shell 会话、当前用户的所有未来会话,甚至是您定义它们的计算机上所有用户的所有未来会话。

您还可以使用环境变量保存身份验证凭证(API 令牌、API 密钥和电子邮件),并在不同命令中重复使用它们。但是,请确保在尽可能小的范围内定义这些值(仅限当前 shell 会话或当前用户的所有新会话)。

设置和引用环境变量的过程取决于您的平台和 shell。

定义环境变量

要为当前 shell 会话定义 ZONE_ID 环境变量,请运行以下命令:

export ZONE_ID='f2ea6707005a4da1af1b431202e96ac5'

要为当前用户的所有新 shell 会话定义该变量,请在 shell 配置文件末尾添加上述命令(例如,bash shell 使用 ~/.bashrczsh shell 使用 ~/.zshrc)。

要为当前 PowerShell 会话定义 ZONE_ID 环境变量,请运行以下命令:

$Env:ZONE_ID='f2ea6707005a4da1af1b431202e96ac5'

要为当前用户的所有新 PowerShell 会话定义环境变量,请在 PowerShell 配置文件中设置该变量。您可以通过运行 echo $PROFILE 获取 PowerShell 配置文件的路径。

或者,使用 System.Environment 类的 SetEnvironmentVariable() 方法为当前用户的所有新 PowerShell 会话设置变量。例如:

[Environment]::SetEnvironmentVariable("ZONE_ID", "f2ea6707005a4da1af1b431202e96ac5", "User")

运行此命令不会影响当前会话。您需要关闭并启动新的 PowerShell 会话。

要为当前命令提示符会话定义 ZONE_ID 环境变量,请运行以下命令:

set ZONE_ID=f2ea6707005a4da1af1b431202e96ac5

要为当前用户的所有未来命令提示符会话定义环境变量,请运行以下命令:

setx ZONE_ID f2ea6707005a4da1af1b431202e96ac5

运行此命令不会影响当前窗口。您需要运行 set 命令或关闭并启动新的命令提示符窗口。

引用环境变量

在命令中引用环境变量时,在变量名前添加 $ 前缀(例如 $ZONE_ID)。确保引用变量的完整字符串要么不加引号(如果不包含空格),要么用双引号 ("") 括起来。

例如:

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

在命令中引用环境变量时,在变量名前添加 $Env: 前缀(例如 $Env:ZONE_ID)。确保引用变量的完整字符串要么不加引号,要么用双引号 ("") 括起来。

例如:

Invoke-RestMethod -URI "https://api.cloudflare.com/client/v4/zones/$Env:ZONE_ID" -Method 'GET' -Headers @{'Authorization'="Bearer $Env:CLOUDFLARE_API_TOKEN"}

在命令中引用环境变量时,用 % 字符括住变量名(例如 %ZONE_ID%)。

例如:

curl "https://api.cloudflare.com/client/v4/zones/%ZONE_ID%" --header "Authorization: Bearer %CLOUDFLARE_API_TOKEN%"

这篇文档对您有帮助吗?