トークンを取得する1つのカールコマンドの値を別のカールコマンドに転送したいと思います。同じ値を保持してください。このコードはトークン値を取得しますが、他のカールコマンドを使用するとトークンが無効になるようです。
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
私が見ることができる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"