我正在努力将我的 etag 传递给 cURL 并获得成功的响应。我得到的 etag 是:
etag=$(
curl \
-SIXGET \
-u $token \
-H "Accept: application/json" \
"$api_url/domain-types/activation_run/collections/pending_changes" | awk '/^ETag:/ { print $2 }'
我已经验证这会返回正确的 etag。但是以下 cURL 请求失败:
curl -v -L \
-u $token \
-H "Accept: application/json" \
-H "If-Match: $etag" \
-H "Content-Type: application/json" \
-d "{
\"sites\": [
\"$site\"
]
}" \
"$api_url/domain-types/activation_run/actions/activate-changes/invoke"
这里的问题是-H "If-Match: $etag
,如果我将 etag 作为文字字符串(带引号或不带引号)传递,我会得到有效的响应。作为参考,,,${etag}
将\"$etag\"
其放入文件中并调用它@etag.txt
等等也不起作用。
这是错误响应:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address> ... </address>
</body></html>
上面的代码片段都位于 script.sh 文件中,调用该文件sudo ./script.sh
我正在使用 CheckMK 的 REST API。
编辑:确实:printf "etag <%q>\n" "$etag"
我明白了etag <$'"e3asdajldlskj..."\r'>
。添加到 etag 声明| tr -d '\r'
和 cURL 请求中使用$etag
可以解决问题。