Curl:使用 zsh 环境变量添加内容类型不起作用

Curl:使用 zsh 环境变量添加内容类型不起作用

我尝试使用 Curl 发送一些数据。这是一个最简单的有效示例:

curl -v -H "Content-type: text/html" 127.0.0.1:1111

我看到如下输出:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
Content-type: text/html

内容类型在输出中设置。它起作用了。我想要的是使用环境变量输入内容类型。

我这样写:

HTML='-H "Content-Type: text/html"

然后在下一个命令中我写下:

curl -v $HTML 127.0.0.1:1111

但失败了。我得到了以下输出:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
  "Content-Type: text/html"

Curl 并未生成真正的标头,它只是松散的字符串。它周围有引号,并且像上面看到的一样缩进。这与之前不同,因此命令不起作用。它被服务器拒绝,因为内容类型错误。

我曾尝试使用 --header 代替 -H,如下所示:

HTML='--header "Content-Type: text/html"'

这会产生一个令人困惑的错误:

curl: option --header "Content-Type: text/html": is unknown
curl: try 'curl --help' or 'curl --manual' for more information

我很困惑。我在这里看到过其他人发来的消息,他们想要在帖子数据中设置环境变量,这是另一个问题。

我在 MAC OS X 上使用 zsh 和 Curl。我希望我的示例足够简单。

感谢您的时间和帮助!

答案1

这种行为是由于默认情况下不会根据空格拆分参数,因此您实际上将其--header "Content-Type: text/html"作为一个参数传递给 curl,而它应该作为两个参数传递(首先是 `--header`` 选项,然后是相应的值)。

你可以建议通过使用扩展标志来进行单词拆分(它还考虑了嵌套引用,这在您的示例中很重要)(z)

HTML='--header "Content-Type: text/html"'
curl -v ${(z)HTML} 127.0.0.1:1111

相关内容