
Я хотел выполнить один 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 "[email protected]&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() и будет легко получить require auth cookie.
решение1
Тот факт, что для доступа к API вам сначала необходимо войти в систему, означает, что одного curl-запроса, вероятно, будет недостаточно.
Вероятно, вам понадобится скрипт с несколькими curl
запросами и рабочим процессом, похожим на:
- Сделайте запрос API с существующими файлами cookie из файла cookie
- Проверьте код ответа, если все в порядке, значит срок действия сеансовых cookie-файлов еще не истек, и вам не нужно ничего делать. Да!
- Если код ответа указывает на ошибку аутентификации (ваш сеанс аутентификации пуст или истек), то вам необходимо войти в систему.
- Введите свои учетные данные в форму входа на сервер CAS.
- Проверьте код ответа и убедитесь, что вход был успешным, и обновите файл cookie.
Илиdie();
- ПЕРЕЙТИ К 1.
Стандартный плагин инструментов разработчика Chrome может помочь вам создать основу для такого скрипта curl с помощьюКопировать все как cURLопция в сетевой консоли.