#api #cloudflare
Вопрос:
Я посмотрел на https://api.cloudflare.com/#firewall-rules-update-firewall-rules однако я не уверен, как именно я обновил бы правило брандмауэра с помощью одной команды curl. Правило уже создано, мне нужно только включить/отключить его, используя мой ключ API CF, адрес электронной почты CF и идентификатор правила брандмауэра CF.
Я попробовал следующее
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules/FIREWALLRULE"
-H "X-Auth-Email: myemail@example.com"
-H "X-Auth-Key: GLOBALAPIKEY"
-H "Content-Type: application/json"
--data '{"paused":"false"}'
он возвращается
{
"result": null,
"success": false,
"errors": [
{
"code": 10014,
"message": "firewallrules.api.malformed_request_body"
}
],
"messages": []
}
Но не вносит никаких изменений
Ответ №1:
Глядя на документацию по API Cloudflare, кажется, что вы анализируете значение paused
как строку, а не логическое значение.
Похоже, это то, что дает вам ошибку ниже:
"errors": [
{
"code": 10014,
"message": "firewallrules.api.malformed_request_body"
}
Тем не менее, я попытался запустить его, но запрос все еще кажется неполным. Независимо от того , что я делаю , API , похоже, требует анализа action
, правила id
и filter
действия, которые требуют filter id
и paused
действия.
"errors": [
{
"message": "filter is a required field",
"source": {
"pointer": "/0"
}
}
],
"errors": [
{
"message": "invalid action provided",
"source": {
"pointer": "/0"
}
}
],
Вот что я сделал:
- Получите идентификатор правила, используя
GET zones/:zone_identifier/firewall/rules
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules"
-H "X-Auth-Email: ACCEMAIL"
-H "X-Auth-Key: APIKEY"
-H "Content-Type: application/json"
Ответить:
"result": [
{
"id": "RULEID",
"paused": false,
"description": "test",
"action": "block",
"filter": {
"id": "FILTERID",
"expression": "(http.host eq "some.domain.com")",
"paused": false
},
"created_on": "2021-10-06T05:33:58Z",
"modified_on": "2021-10-06T05:33:58Z"
}
],
"success": true,
"errors": [],
"messages": [],
"result_info": {
"page": 1,
"per_page": 25,
"count": 1,
"total_count": 1,
"total_pages": 1
}
- Как только вы получите идентификатор, используйте следующее, соответственно заменив значения, чтобы обновить статус правила.
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules/RULEID"
-H "X-Auth-Email: ACCEMAIL"
-H "X-Auth-Key: APIKEY"
-H "Content-Type: application/json"
--data '{"action": "block","paused": true,"filter":{"id": "RULEID","paused":true}}'
Ответить:
{
"result": {
"id": "RULEID",
"paused": true,
"action": "block",
"filter": {
"id": "FILTERID",
"expression": "(http.host eq "some.domain.com")",
"paused": true
},
"created_on": "2021-10-06T05:33:58Z",
"modified_on": "2021-10-06T05:53:51Z",
"index": 0
},
"success": true,
"errors": [],
"messages": []
}
И я также могу подтвердить, что панель мониторинга Cloudflare отражает это обновление.