我想将获取令牌的一个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"