Проблема, чтобы получить Cookie: JSESSIONID и auth_cookie
Я хотел выполнить один API с помощью командной строки, но мне нужно передать Cookie: JSESSIONID=<>; Значение auth_cookie=<> при его выполнении. У нас есть CAS-аутентификация для целевого API.
Пожалуйста, дайте мне знать curl или другую команду, чтобы получить Cookie: JSESSIONID=<>; Значение auth_cookie=<>, чтобы я мог передать его при выполнении API.
Я пробовал с
curl -v -s --cacert /etc/ssl/certs/cacert.crt https://example.com/login -c cookiefile -d "user=user1@domain.com&password=xxxx" -X POST
Но он просто хранит JSESSIONID в файле cookie. В браузере войдите 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 должен иметь URL-адрес местоположения, добавляемый с идентификатором заявки. Нужно сделать последний вызов в этом месте, чтобы получить auth_cookie. Но в моем случае, он не дает URL-адрес самого местоположения.
Я имею в виду решение здесь
Я редактирую этот вопрос, так как я получил решение с помощью Python. Используйте mechanize.Browser(), и вам будет легко получить требуемый файл cookie авторизации.
1 ответ
Тот факт, что вам необходимо войти в систему, прежде чем вы сможете получить доступ к API, означает, что одного запроса curl, вероятно, недостаточно.
Вам, вероятно, нужен скрипт с несколькими curl
запросы и рабочий процесс похож на:
- Сделайте запрос API с существующими файлами cookie из Cookiefile
- Проверьте код ответа. Если все в порядке, то cookie-файлы сеанса еще не истекли, и вам больше не нужно ничего делать. Да уж!
- Если код ответа указывает на состояние ошибки аутентификации (сеанс аутентификации пуст или истек); тогда вам нужно авторизоваться.
- Отправьте свои учетные данные в форму входа на сервер CAS.
- Проверьте код ответа и посмотрите, был ли успешным вход в систему, и обновите файл cookie.
Или жеdie();
- GOTO 1.
Стандартный плагин инструментов разработчика Chrome может стандартно помочь вам создать основу для такого сценария скручивания с помощью опции " Копировать все как cURL" в сетевой консоли.