【问题标题】:How to pass a header as argument in curl command? [duplicate]如何在 curl 命令中将标头作为参数传递? [复制]
【发布时间】:2016-04-09 14:57:57
【问题描述】:

我正在尝试执行使用预定义变量作为标头的 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 

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

【问题讨论】:

  • 分词使您的标题参数-H"Content-Type:application/json" 等。我建议您使用数组来保存标题。否则你可能需要eval
  • 你会在 curl 命令中执行 eval 命令吗?

标签: bash shell curl


【解决方案1】:

请注意,bash 中的变量扩展很容易让人措手不及。

一个很好的经验法则是将双引号括在您想要扩展的任何变量上,例如curl "$header" -w "http code: %{http_code}\\n" -X POST -d "$BODY" "$URL"

如果 $SOMETHING 变量单独出现或出现在双引号中,Bash 总是会扩展它们。 (如果它们出现在单引号中,则不是)。

当扩展带有双引号时,它们被shell视为单个“标记”,无论如何。

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

【讨论】:

  • 谢谢,这最终解决了它。用单引号替换了双引号。
  • 对我不起作用。 curl '$header' ... 给我curl: (6) Could not resolve host: $header
  • @AlexS,嗯?双引号是正确的(ish;您不能以这种方式传递多个参数;为此,需要一个数组,如BashFAQ #50 中所述);单引号是错误的(它们将带有文字$s 的字符串而不是变量内容传递给curl)..
猜你喜欢
  • 2018-11-11
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多