토큰을 가져오는 하나의 컬 명령의 값을 다른 컬 명령으로 전송하고 싶습니다. 동일한 값을 유지하십시오. 이 코드는 토큰 값을 가져오지만 다른 컬 명령을 사용하면 토큰이 무효화되는 것 같습니다.
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'
저는 리눅스를 사용하고 있습니다.
답변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"