如何在curl命令中将标头作为参数传递?

时间:2016-01-05 17:19:14

标签: bash shell curl

我正在尝试使用预定义变量作为标题执行curl命令。

header='-H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51"'

这基本上就是curl命令

curl $header -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

然后返回错误消息

rl: (6) Could not resolve host: application
curl: (6) Could not resolve host: 7feb6e62-35da-4def-88e9-376e788ffd97"
curl: (6) Could not resolve host: 51"

这可以按预期工作

curl -H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51" -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

我试图将标头作为变量传递的原因是因为我正在编写一个循环遍历的数组,但是由于某些原因,目前这不适用于标头。身体传递参数没有问题。

1 个答案:

答案 0 :(得分:3)

请注意,bash中的变量扩展可以轻松地让人们措手不及。

一个非常好的经验法则是在你要扩展的任何变量周围放置双引号,如curl "$header" -w "http code: %{http_code}\\n" -X POST -d "$BODY" "$URL"

如果变量单独出现,或者如果它们出现在双引号中,则Bash始终会扩展$SOMETHING个变量。 (如果它们出现在单引号中,则不一样)。

当使用双引号展开时,它们将被视为单个"令牌"无论如何,都是贝壳。

当扩展没有双引号时,它们将被解析,就像您键入了内容而不是变量一样。所以 - 如果该变量有空格,这可能意味着shell会将它们视为参数之间的分隔符。