我需要连接2个变量,但是当我执行bash代码时,出现此错误filters.api.malformed_request_body
。
我需要获取当前IP,以便能够向过滤器添加新IP,这是因为我需要使用两个变量,$a
是防火墙规则中的当前IP,并且{ {1}}是我要添加的新IP。
要保留现有值,请发出GET请求,并根据响应确定要在PUT请求中包括哪些字段(以及相应的值),并避免不必要的覆盖。
代码:
$b
我还尝试了:a=122.16.89.10
b=137.77.77.77
curl -X PUT \
-H "X-Auth-Email: EMAIL" \
-H "X-Auth-Key: KEY" \
-H "Content-Type: application/json" \
-d '[
{
"id": "ID",
"paused": false,
"expression": "(ip.src in {'$a'" "'$b'})",
"description": "Block IP"
}
]' "https://api.cloudflare.com/client/v4/zones/ZONE/filters"
和:
"(ip.src in {'$a $b'})"
如果我new_filter="$a $b"
...
...
"(ip.src in {'$new_filter'})"
显示正确的结果:
echo $new_filter
当我使用变量new_filter="$a $b"
echo $new_filter
#122.16.89.10 137.77.77.77
时,它也显示此错误$new_filter
,第13行就是这个curl: (3) [globbing] unmatched close brace/bracket in column 13
。
没有工作,为什么?我收到此错误:
-H "Content-Type: application/json" \
这有效:{
"result": null,
"success": false,
"errors": [
{
"code": 10014,
"message": "filters.api.malformed_request_body"
}
],
"messages": []
}
。
答案 0 :(得分:1)
好吧,让我们来看第一个示例,并对其进行修改以打印JSON正文:
export a=122.16.89.10
export b=137.77.77.77
echo '[
{
"id": "ID",
"paused": false,
"expression": "(ip.src in {'$a'" "'$b'})",
"description": "Block IP"
}
]'
输出是这样的:
{
"id": "ID",
"paused": false,
"expression": "(ip.src in {122.16.89.10" "137.77.77.77})",
"description": "Block IP"
}
]
您可以看到JSON无效。 expression
中的双引号不平衡。
改为尝试"expression": "(ip.src in {'$a' '$b'})",
-会产生有效的JSON。