We follow several formatting conventions for cURL commands.
要自动将我们的约定融入您的示例中,请使用:
APIRequest:用于命中 Cloudflare API 架构中端点的示例。CURL:用于其他 cURL 命令。
为清晰起见,请使用长参数名称:
--header(而不是-H)--request(需要时,而不是-X)--data(而不是-d)
您不需要使用 --url 参数,因为它是主要的 cURL 参数。此外,URL 不需要用双引号("")括起来,除非它包含 ? 字符(即包含查询字符串时)。
使用两个空格缩进请求或响应体(包含在请求/响应中的额外数据)。
对于包含正文内容的请求,从正文部分(本页示例中 --data 之后的行)开始缩进。这意味着 URL、任何标头以及包含 --data 参数的行都不应缩进。
不包含正文的请求也不应该缩进,以便与包含正文的请求保持一致。
jq ↗ 是一个独立的工具,并非所有人都会安装。cURL 示例不应将通过 jq 格式化响应作为示例的一部分。
如果您必须建议使用此工具,可以添加一个指向 Fundamentals 中 发起 API 调用 页面的链接,该页面提及了此工具。不要在 cURL 示例附近重复关于 jq 的现有内容。
- 确保不要在 cURL 命令中使用排版引号或智能引号,否则命令将失败。
- URL 中的占位符应遵循与 API 文档相同的格式:
$ZONE_ID - 请求正文(即
POST/PUT/PATCH请求中包含的数据)中的占位符应使用尖括号:<RULE_ID>。
相同的占位符名称应对应相同的值——为不同的 ID 值使用不同的占位符名称。如果您希望响应中的值与请求中的值相匹配,可以在响应中使用相同的请求占位符。
如果使用 Email + API Key 身份验证,请在 cURL 命令中包含以下参数,以向请求中添加两个必需的 HTTP 标头:
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \如果使用 API 令牌(API Token,首选身份验证方法),请在 cURL 命令中包含以下参数,以向请求中添加所需的 HTTP 标头:
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \对于 GET 请求,请勿包含 --request GET 命令行参数,因为在请求不包含正文时这是默认行为,且不建议在 GET/POST 请求中使用:
curl {full_url_with_placeholders} \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"curl https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall/rules \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"curl --request DELETE \
{full_url_with_placeholders} \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"没有正文的请求不需要语法高亮,但我们使用 bash 语法高亮来突出显示多个有界定符的字符串。
如果请求包含正文,请务必包含 Content-Type 标头。对于包含 JSON 内容的请求,该标头应为 Content-Type: application/json。
此标头应出现在身份验证标头之后。
对于包含正文的 POST 请求,请勿包含 --request POST 命令行参数,因为当请求包含正文时这是默认行为。
curl {full_url_with_placeholders} \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '({|[)
(...JSON content, pretty printed, using 2-space indents...)
(}|])'curl https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall/rules \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '[
{
"filter": {
"id": "<FILTER_ID>"
},
"action": "allow",
"description": "Do not challenge login from office"
}
]'curl --request (PUT/PATCH) \
{full_url_with_placeholders} \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '({|[)
(...JSON content, pretty printed, using 2-space indents...)
(}|])'将 JSON 负载(--data 命令行参数)括在单引号(')而不是双引号中,因为这样需要的转义更少(JSON 中的字符串必须使用双引号定界)。
在正文中转义单引号的推荐方法如下(假设用户将在类似 bash 的终端中运行该命令):
- 将单引号
'替换为'\''
意思是“关闭字符串,添加转义的单引号,重新开始字符串”。
curl https://api.cloudflare.com/api/v4/zones/$ZONE_ID/page_shield/policies \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js '\''self'\''"
}'如果您发起不包含正文的 POST 请求,则必须在 cURL 命令中显式添加 --request POST 参数。
curl --request POST \
{full_url_with_placeholders} \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"包含 JSON 正文的示例请求代码块应使用 bash 语法,类似于不包含正文的示例请求。
curl https://api.cloudflare.com/api/v4/zones/$ZONE_ID/page_shield/policies \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"description": "My first policy in log mode",
"action": "log",
"expression": "http.host eq \"myapp.example.com\"",
"enabled": "true",
"value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js '\''self'\''"
}'使用 json 语法高亮包含完整的响应(包括任何空的 error 和 message 数组,如果存在的话)。
响应要么以对象({ ... })开头,要么以列表([ ... ])开头。首字符和尾字符应各自独占一行。
({|[)
(...JSON content, pretty printed, using 2-space indents...)
(}|])- 如果存在通过先前命令获取的 ID,或者它们的精确值在当前上下文中并不重要,请使用占位符(例如
<RULE_ID>)代替实际 ID。相同的占位符名称应对应相同的值。为不同的 ID值使用不同的占位符名称。 - 包含响应体最相关部分的响应摘录或片段应注明它们并不对应完整的响应。
{
"result": {
"id": "<RULE_ID>",
"paused": false,
"description": "do not challenge login from office",
"action": "allow",
"priority": null,
"filter": {
"id": "<FILTER_ID>",
"expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")",
"paused": false,
"description": "Login from office"
}
},
"success": true,
"errors": [],
"messages": []
}