한 컬 명령에서 다른 명령으로 토큰 값 전송

한 컬 명령에서 다른 명령으로 토큰 값 전송

토큰을 가져오는 하나의 컬 명령의 값을 다른 컬 명령으로 전송하고 싶습니다. 동일한 값을 유지하십시오. 이 코드는 토큰 값을 가져오지만 다른 컬 명령을 사용하면 토큰이 무효화되는 것 같습니다.

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" 

관련 정보