我尝试使用 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