创建 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 元素都绑定到特定的版本号。最新版本为 Version 4。所有 Version 4 HTTPS 端点的稳定基础 URL 为:https://api.cloudflare.com/client/v4/
有关发起 API 调用的具体指导,请参阅以下资源:
- 产品的开发者文档部分中的操作指南。
- API 架构文档中每个端点的请求和响应 payload。
- 适用于 Go ↗、TypeScript ↗、Python ↗ 或 HashiCorp Terraform ↗ 的一方库。
多个 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:选择排序依据的属性。direction:ASC(升序)或DESC(降序)。
可用选项将在 API 文档中所有端点的 result_info 末尾列出。
最新版本的 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 具有用于发起 REST API 调用和处理 JSON 响应的专用 cmdlet(Invoke-RestMethod 和 ConvertFrom-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_ID、CLOUDFLARE_EMAIL 和 CLOUDFLARE_API_KEY 已预先定义。有关更多信息,请参阅环境变量。
默认情况下,输出仅包含 JSON 对象层次结构的第一级(在上面的示例中,不会显示 hosts 和 certificates 等对象的内容)。要像 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 中 curl 是 Invoke-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 使用 ~/.bashrc,zsh 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%"