shell curl POST请求返回400

68bkxrlz  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(180)

我正在写一个shell脚本来触发一些POST curl请求。我得到400当我使用下面的shell脚本。

#!/bin/sh
ENDPOINT="https://example.com:443/v1/API_NAME"
BODY='{"key1": "value1", "key2": "value2"}'
curl -H "Content-Type: application/json" -v -k -X POST $ENDPOINT -d $BODY

但是当我使用body内联时,它工作得很好,如下所示:

curl -H "Content-Type: application/json" -v -k -X POST $ENDPOINT -d '{"key1": "value1", "key2": "value2"}'

在终端上看到的两个请求之间的日志差异是Content-Length。不知何故,对于第一个curl请求,Content-Length是1,我认为这是失败的原因。谁能告诉我为什么内容长度是1,如何解决这个问题?

g0czyy6m

g0czyy6m1#

多加引号!

curl -H "Content-Type: application/json" -v -k "$ENDPOINT" -d "$BODY"

使用-d交换机时不需要-X POST
学习如何在shell中正确引用,这非常重要:
“双引号”每个包含空格/元字符和 every 扩展的文字:"$var""$(command "$var")""${array[@]}""a & b"。使用'single quotes'作为代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。看到
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
https://web.archive.org/web/20230224010517/https://wiki.bash-hackers.org/syntax/words
when-is-double-quoting-necessary

相关问题