从curl请求中提取令牌并在另一个shell命令中使用

时间:2017-07-21 16:02:57

标签: json bash curl

我已经开始接受bash脚本编写而且我遇到了一些我正试图解决的问题。

我有一个输出令牌的curl命令,我需要在以下命令中使用它:

curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}'

然后在此输出一个令牌:

{"token":"ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65"}

然后我需要在后续命令中使用它

curl https://server:port/ -k -X POST -H 'Content-Type: application/json' -H 'X-Cookie:token=token' -d '

我以为我可以将令牌输出到文件,然后让sed命令将令牌写入文件,然后新命令使用变量where token = $ token

谢谢!

4 个答案:

答案 0 :(得分:2)

这是JSON解析工具派上用场的地方(例如):

$ echo '{"token":"ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65"}' | jq -r .token
ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65

所以

json=$( curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}' )
token=$( jq -r ".token" <<<"$json" )

curl https://server:port/ -k -X POST -H "X-Cookie:token=$token" ...

答案 1 :(得分:1)

没有进一步的工具而不是bash(经过测试的Centos / Rhel7 / GitBash):

json=$(curl -k 'https://server:port/session' \
            -X POST -H 'Content-Type: application/json' \
            -d '{"username":"admin","password":"password"}') \
&& token=$(echo $json | sed "s/{.*\"token\":\"\([^\"]*\).*}/\1/g") \
&& echo "token = $token"

然后使用您的身份验证需要这样的命令:

curl https://server:port/ -k -X POST \
                          -H 'Content-Type: application/json' \
                          -H 'X-Cookie:token=$token' -d ...'

答案 2 :(得分:0)

如果安装了Python,并且希望它在现代系统上,您可以执行以下操作:

OUTPUT="$(curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}' | python -c "import sys, json; print json.load(sys.stdin)['token']")"

这会给你:

echo $OUTPUT
ec2e99a1d294fd4bc0a04da852ecbdeed3b55671c08cc09f

答案 3 :(得分:-2)

使用``syntax:

cmd1result=$(command1 | cut -d ':' -f 2 | grep -Po "[a-z0-9-]+")
command2 $cmd1result