我在用curl -X POST命令发送适当的json数据时遇到了问题。我已经通过复制和粘贴硬编码的值在mac上本地运行POST命令,但是我现在正在尝试创建一个.sh脚本来自动化这个过程。在运行下面的代码时,我会得到以下错误:
{“消息”:“JSON输入的意外结束”}
以下是来自JSON_STRING的输出json,其名称为泛型,其他任何内容都没有更改:
{ "url": "api_url", "tileset": "username.filename" }
一旦我能够找到如何在POST命令中正确地格式化json,我知道它会工作,但我似乎无法正确地理解语法。希望一双全新的/体验的眼睛能捕捉到我的错误:)另外,我拥有的所有变量都是正确的,并且已经通过在mac终端中运行变量值来确认。提前感谢您的帮助!
curl_url="http://${bucket}.s3.amazonaws.com/${key}"
echo $curl_url
tileset_id="username.filename"
JSON_STRING=$(jq -n \
--arg bn "$curl_url" \
--arg on "$tileset_id" \
'{url: $bn, tileset: $on}')
echo $JSON_STRING
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d $JSON_STRING 'apiurl'发布于 2020-03-20 18:07:07
绝对需要引用shell变量:
curl ... -d "$JSON_STRING" http://example.com/end/point否则,shell将执行分词操作,而-d的参数将变为{"url":。
另外,bash数组可以帮助提高可读性:
curl_url="http://${bucket}.s3.amazonaws.com/${key}"
tileset_id="username.filename"
JSON_STRING=$(
jq -n \
--arg bn "$curl_url" \
--arg on "$tileset_id" \
'{url: $bn, tileset: $on}'
)
curl_opts=(
-X POST
-H "Content-Type: application/json"
-H "Cache-Control: no-cache"
-d "$JSON_STRING"
)
curl "${curl_opts[@]}" 'apiurl'https://stackoverflow.com/questions/60778756
复制相似问题