Json 从curl请求中提取令牌并在另一个shell命令中使用
我已经开始学习bash脚本,我被困在一些我正努力想解决的问题上 我有一个输出令牌的curl命令,我需要在以下命令中使用它:Json 从curl请求中提取令牌并在另一个shell命令中使用,json,bash,curl,jq,Json,Bash,Curl,Jq,我已经开始学习bash脚本,我被困在一些我正努力想解决的问题上 我有一个输出令牌的curl命令,我需要在以下命令中使用它: curl -k 'https://server:port/session' -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"password"}' 然后在此处输出一个令牌: {"token":"ac07098ad59ca6f3fccea0e2a2f6cb080d
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命令将令牌写入一个文件,然后新命令使用一个变量,其中token=$token
谢谢 使用``语法:
cmd1result=$(command1 | cut -d ':' -f 2 | grep -Po "[a-z0-9-]+")
command2 $cmd1result
这就是JSON解析工具的用武之地(例如: 所以
json=$(curl-k'https://server:port/session'-X POST-H'内容类型:application/json'-d'{“username”:“admin”,“password”:“password”})
token=$(jq-r).token“如果安装了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
除了bash之外没有其他工具(已测试Centos/Rhel7/GitBash):
然后使用以下命令:
curl https://server:port/ -k -X POST \
-H 'Content-Type: application/json' \
-H 'X-Cookie:token=$token' -d ...'
但是,它可以工作,我只需要“ac07098ad59ca6f3fccea0e2a2f6cb080df55c9a52fc9d65”部分,不带引号。它将始终是一个随机的48个字符字符串。例如:“X-Cookie:token=AC07098AD59CA6F3FCCEA0E2A2F6CB080DF55C9A52C9D65”$()
是现代的替代品。Backticks实际上是传统的支持,有严重的缺点——很容易嵌套$($())
,而将Backticks放在Backticks中是痛苦的。而且您的grep命令会从令牌中删除十六进制数字。因此,它不准确/损坏,并且(由于不必要地使用非标准选项-P
)不必要地特定于平台。(请注意,标记中的e
是需要保留的字符集的一部分,因为e
在[0-9a-f]
范围内,因此仅剥离字符范围是完全不可行的)。安装WSL并在Windows上安装Linux。Hi@teikitel如果我使用格式为Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.Eyjzdwiiij5bwfUdWnoyxJPyW4IlcjleHaiOjE2mji3OTC5mzl9.d7yT6r8pf0QEh-sMDxNiObDSdF2K17l3WqcjHnv9800Hello@MichaelKors的Bear Token怎么办?通常情况下,如果您的身份验证服务重新运行的响应负载仅包含一个st类似于“Bearer eyJhbG…”的环。因此它更简单,无需解析:token=$json
。那么您应该使用的http头是-H'Authorization:$token'
,而不是-H'X-Cookie…
echo $OUTPUT
ec2e99a1d294fd4bc0a04da852ecbdeed3b55671c08cc09f
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 ...'