【问题标题】:How to run a curl command with headers using shell script如何使用 shell 脚本运行带有标头的 curl 命令
【发布时间】:2018-06-26 06:57:41
【问题描述】:

我尝试运行一个 shell 脚本,其中包含一个 curl 命令,其所需的标头如下。

counter=1
H1='Content-Type: application/json'
H2='Accept: application/json'
H3='Authorization: Bearer a0a9bb26-bb7d-3645-9679-2cd72e2b4c57'
URL='http://localhost:8280/mbrnd_new/v1/post'

while [ $counter -le 10 ]

do

TEST="curl -X POST --header $H1 --header $H2 --header $H3 -d @s_100mb.xml $URL"
echo $TEST
RESPONSE=`$TEST`
echo $RESPONSE
sleep 5
done
echo "All done"

它给出一个错误

curl: (6) Could not resolve host: application
curl: (6) Could not resolve host: Bearer
curl: (6) Could not resolve host: a0a9bb26-bb7d-3645-9679-2cd72e2b4c57
<ams:fault xmlns:ams="http://wso2.org/apimanager/security"><ams:code>900902</ams:code><ams:message>Missing Credentials</ams:message><ams:description>Required OAuth credentials not provided. Make sure your API invocation call has a header: "Authorization: Bearer ACCESS_TOKEN"</ams:description></ams:fault>

给定的访问令牌和其他标头参数是正确的。直接调用'curl'时效果很好。

我尝试了不同的方法,例如使用 \" 但没有任何效果。如果有人可以提供正确的答案,我将不胜感激。

谢谢。

【问题讨论】:

  • 您的示例将中断,因为替换单个标头变量 ($H1, ...) 会扩展为包含空格的字符串。

标签: shell curl http-headers access-token


【解决方案1】:

你要执行的命令是这样的:

curl -X POST --header "$H1" --header "$H2" --header "$H3" -d @s_100mb.xml "$URL"

(我将使用-H 而不是--header,因为它更短。)

最简单的方法是

response=$(curl -X POST -H "$H1" -H "$H2" -H "$H3" -d @s_100mb.xml "$URL")

您的解决方案的问题在于您根本没有分隔标头值:

curl -X POST -H $H1

如果H1的内容是foo: bar,那么这将扩展为

curl -X POST -H foo bar

这将被解释为

curl -X POST -H (foo:) bar

(使用() 仅用于说明优先级,在shell 中没有这样的工作),即bar 将被视为第一个位置参数,恰好是主机名,导致奇怪的错误你看。

你想要的是

curl -X POST -H (foo: bar)

这可以通过将扩展正确地用引号括起来来实现,如上所示。

另外,你应该prefer $(cmd) to `cmd`

作为最后一条建议,如果您正在学习如何使用 shell,避免多次扩展可能是明智之举,即不要将您的命令存储在 CMD 变量中,稍后再将其存储为 $($CMD)这会导致在多个位置进行多次扩展(首先是分配了 CMD,其次是在 $(...) 子 shell 中扩展了 CMD),因此很难理解到底发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多