将令牌值从一个curl命令转移到另一个命令

将令牌值从一个curl命令转移到另一个命令

我想将获取令牌的一个curl 命令的值传输到另一个curl 命令。保持相同的值。此代码将获取一个令牌值,但当使用另一个curl命令时,它似乎使令牌无效:

token=$(curl -k -X 'POST' \
 '<URL>/api/api-token-auth/' \
 -H 'accept: application/json' \
 -H 'Authorization: Basic dGVzdGFkbWluOlBhc3N3b3JkJDE=' \
 -H 'Content-Type: application/x-www-form-urlencoded' \
 -d 'username=testadmin&password=Password%241' | sed -n '/ *"token": *"/ {s///; s/".*//; p;} ') echo $token && curl -k -X 'GET' \
 '<URL>/api/assessments/' \
 -H 'accept: application/json' \
 -H 'Authorization: Token $token' 

我正在使用Linux。

答案1

我看到的一个可能的问题是:生成的令牌可能包含被 sed 删除的字符。因此,您更改了令牌,它就无法进一步使用。

在这种情况下,我建议使用杰克(可能必须安装在您的系统上)来解析 json 而不是修复调用sed

由于我不知道您正在使用什么服务,因此我无法说出调用的确切语法jq。一种疯狂的猜测是:

jq --monochrome-output --raw-output --unbuffered '"\(.token)"'

sed用我的例子代替jq,看看这是否会让你更接近。

(不确定,这是否符合答案,但我也是新来的,还不允许发表评论)

答案2

这对我有用

token=$(curl 'https://example.com/v1.2/auths/login' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json' \
--data-raw '{"username":"username","password":"password"}'  | jq '.token')
echo $token

#to remove the double quotes from the token string 
token=`sed -e 's/^"//' -e 's/"$//' <<<"$token"`  

 curl 'https://example.com/otherapi' \
  -H 'Accept: application/json, text/plain, */*' \
  -H "Authorization: Bearer $token" 

相关内容