
명령줄을 사용하여 하나의 API를 실행하고 싶었지만 Cookie: JSESSIONID=<>;를 전달해야 합니다. auth_cookie=<> 실행하는 동안 값. 대상 API에 대한 CAS 인증이 있습니다.
쿠키를 얻으려면 컬이나 다른 명령을 알려주십시오: JSESSIONID=<>; auth_cookie=<> 값이므로 API를 실행하는 동안 전달할 수 있습니다.
나는 시도했다
curl -v -s --cacert /etc/ssl/certs/cacert.crt https://example.com/login -c cookiefile -d "[email protected]&password=xxxx" -X POST
하지만 쿠키 파일에 JSESSIONID를 저장하는 것뿐입니다. 브라우저 로그인에서는 https://example.com/login
인증 후 CAS 서버 로그인 페이지로 리디렉션됩니다.https://example.com/index
나는 @HBruijn의 접근 방식을 따랐습니다.
ENCODED_DEST=`echo "https://example.com/login/login" | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg' | sed 's/%2E/./g' | sed 's/%0A//g'`
CAS_ID=`curl -L -s --cacert /etc/ssl/certs/cacertga.crt -c $COOKIE_JAR https://cas-server.example2.com/cas/login?service=$ENCODED_DEST | grep name=.lt | sed 's/.*value..//' | sed 's/\".*//'`
이 CAS_ID 및 JSESSIONID는 다음 호출에서 사용해야 합니다.
curl -L -s --cacert /etc/ssl/certs/cacertga.crt --data "username=$USERNAME&password=$PASSWORD<=$CAS_ID&execution=e1s1&_eventId=submit" -i -b $COOKIE_JAR -c $COOKIE_JAR https://cas-server.example2.com/cas/login?service=$ENCODED_DEST -D .header.txt -o /dev/null
마지막으로 .header.txt에는 티켓 ID가 추가된 위치 URL이 있어야 합니다. auth_cookie를 얻으려면 해당 위치에서 최종 호출을 수행해야 합니다. 하지만 제 경우에는 위치 URL 자체를 제공하지 않습니다.
나는 해결책을 언급한다여기
Python을 사용하여 솔루션을 얻었으므로 이 질문을 편집하고 있습니다. mechanize.Browser()를 사용하면 인증 쿠키 필요를 쉽게 얻을 수 있습니다.
답변1
API에 액세스하기 전에 먼저 로그인해야 한다는 사실은 단일 컬 요청만으로는 충분하지 않을 수 있음을 의미합니다.
curl
다음과 유사한 여러 요청 및 작업 흐름이 포함된 스크립트가 필요할 수 있습니다 .
- 쿠키 파일의 기존 쿠키로 API 요청하기
- 응답 코드를 확인하세요. 괜찮다면 세션 쿠키가 아직 만료되지 않았으므로 더 이상 수행할 필요가 없습니다. 응!
- 응답 코드가 인증 오류 상태(인증 세션이 비어 있거나 만료됨)를 나타내는 경우 그런 다음 로그인해야 합니다.
- CAS 서버 로그인 양식에 자격 증명을 게시하세요.
- 응답 코드를 확인하여 로그인 성공 여부를 확인하고 쿠키 파일을 업데이트합니다.
또는die();
- 1로 가세요.
표준 Chrome 개발자 도구 플러그인은 다음과 같은 컬 스크립트의 기초를 만드는 데 표준적인 도움을 줄 수 있습니다.모두 cURL로 복사네트워크 콘솔의 옵션입니다.