如何在 CURL 命令中传递 POST JSON 数据中的变量值?
how to pass variable value in POST JSON data in CURL command?
有两个字段是唯一的,所以我写了一个命令来在每次构建 POST 方法时生成随机值,并将这些值存储到变量中,并在 CURL 命令行中传递这些变量。脚本如下。
rcontactno=$(cat /dev/urandom | tr -dc '0-9' | fold -w 10 | head -n 1)
rfirstname=$(cat /dev/urandom | tr -dc 'a-zA-Z' | fold -w 10 | head -n
echo $rcontactno and $rfirstname
STATUS=$(curl -v -X POST -d '{"userName":"$rfirstname","contactNo":$rcontactno}' /restaurants/53/managers --header "Content-Type:application/json" --header "Accept:application/json" | grep HTTP | cut -d ' ' -f2 )
#Passing the URL using command-line argument
if [[ STATUS -eq 201 ]]; then
echo “Success”
exit 0
else
echo “Failed”
exit 127
fi
然后我通过
执行脚本
bash manager-post.sh
我遇到这种类型的错误
> POST /restaurants/53/managers HTTP/1.1
> User-Agent: curl/7.37.1
> Host: my-url
> Content-Type:application/json
> Accept:application/json
> Content-Length: 54
>
} [data not shown]
* upload completely sent off: 54 out of 54 bytes
< HTTP/1.1 400 Bad Request
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Fri, 16 Jan 2015 08:59:01 GMT
< Connection: close
<
{ [data not shown]
* Closing connection 0
“Failed”
但是当我 运行 没有 bash 脚本的 curl 命令并明确提及 userName 和 contactNo 的值时,它将成功执行。
我哪里出错了?
单引号不允许在shell中进行变量扩展,因此您需要改用双引号。然后您需要随后转义要按原样发送的双引号。
一种有用的调试技术是将 --trace-ascii dump.txt
添加到您的命令行并在调用 curl 后检查 dump.txt 以查看它是否与您打算发送的内容相匹配。
有两个字段是唯一的,所以我写了一个命令来在每次构建 POST 方法时生成随机值,并将这些值存储到变量中,并在 CURL 命令行中传递这些变量。脚本如下。
rcontactno=$(cat /dev/urandom | tr -dc '0-9' | fold -w 10 | head -n 1)
rfirstname=$(cat /dev/urandom | tr -dc 'a-zA-Z' | fold -w 10 | head -n
echo $rcontactno and $rfirstname
STATUS=$(curl -v -X POST -d '{"userName":"$rfirstname","contactNo":$rcontactno}' /restaurants/53/managers --header "Content-Type:application/json" --header "Accept:application/json" | grep HTTP | cut -d ' ' -f2 )
#Passing the URL using command-line argument
if [[ STATUS -eq 201 ]]; then
echo “Success”
exit 0
else
echo “Failed”
exit 127
fi
然后我通过
执行脚本bash manager-post.sh
我遇到这种类型的错误
> POST /restaurants/53/managers HTTP/1.1
> User-Agent: curl/7.37.1
> Host: my-url
> Content-Type:application/json
> Accept:application/json
> Content-Length: 54
>
} [data not shown]
* upload completely sent off: 54 out of 54 bytes
< HTTP/1.1 400 Bad Request
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Fri, 16 Jan 2015 08:59:01 GMT
< Connection: close
<
{ [data not shown]
* Closing connection 0
“Failed”
但是当我 运行 没有 bash 脚本的 curl 命令并明确提及 userName 和 contactNo 的值时,它将成功执行。
我哪里出错了?
单引号不允许在shell中进行变量扩展,因此您需要改用双引号。然后您需要随后转义要按原样发送的双引号。
一种有用的调试技术是将 --trace-ascii dump.txt
添加到您的命令行并在调用 curl 后检查 dump.txt 以查看它是否与您打算发送的内容相匹配。