Python Requests и CAS

Я не нашел примеров людей, использующих Python для прохождения CAS. Надеюсь, Кеннет Рейтц покажет мне, как "запросы" могут сделать это легко...

По сути, я не могу пройти мимо входа в CAS... никогда не проверяю мою попытку Python. (заметьте, я определил два URL-адреса....url1 - это главная веб-страница, url2 - это ссылка для перенаправления на сайт CAS... Я уже знаю ссылку для перенаправления, так что это легко).

Я понимаю, что все, что мне нужно сделать, - это захватить JsessionId, который CAS отправляет мне в виде файла cookie, затем взять этот файл cookie и просто добавить jsessionid обратно в URL-адрес и отправить его обратно в CAS в виде POST с моим именем пользователя / паролем.). Тем не менее, этот сценарий не удается каждый раз.

Могут ли некоторые гуру CAS помочь мне? Я просто не могу понять, почему это не будет аутентифицировать меня.

import sys
import requests

my_config = {'verbose': sys.stderr }

url1 = 'http://agnes:8080'
url2 = 'https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check'

response = requests.get(url1, headers=headers, verify=False)
print response.cookies

cookies = response.cookies
response = requests.post(url2, headers=headers, verify=False, config=my_config, params=cookies, auth=('username', 'password'))

print response.status_code
print response.content

ВЫВОД.... Обратите внимание, как jsessionId добавляется к url2, так что это хорошо..... Я думаю.

{'JSESSIONID': 'EEE38382A1D5AAACA58E12433BDA0BFF'}

2012-05-18T15:04:17.668601   POST   https://agnes:8543/irisCAS/login?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&JSESSIONID=EEE38382A1D5AAACA58E12433BDA0BFF

200

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
...
...
        </script>

        <form id="fm1" class="fm-v clearfix" action="/irisCAS/login;jsessionid=30ABCAC79FEA5B48399053939530A608?service=http%3A%2F%2Fagnes%3A8080%2FirisRootWeb%2Fj_spring_cas_security_check&amp;JSESSIONID=B6235434D64C5E2E6C063BA3E1C1AC43" method="post">

            <div class="box fl-panel" id="login">
            <!-- Congratulations on bringing CAS online!  The default authentication handler authenticates where usernames equal passwords: go ahead, try it out.  -->
                <h2>Enter your UserId and Password</h2>

(this is just the xml of the CAS login page that I can't get past)

...
...

1 ответ

Хорошо, я понял это, поэтому я собираюсь ответить на этот вопрос для тех, кто может найти это позже. Проблема была в том, что я не понимал основную идею "данных формы". Другими словами, веб-странице нужно было ввести имя пользователя и пароль в "форму", а виртуальную кнопку "отправить" нужно было нажимать через POST, потому что это "событие" (т. Е. _EventId ниже). Поэтому мне пришлось использовать параметр "data" и построить все это как словарь. Вот что я сделал:

payload = {'_eventId': 'submit', 'lt': 'e1s1', 'submit': 'LOGIN', 'username': 'admin', 'password': 'admin'}
sessionResp = sessionReq.post(url2, data=payload, params=cookies, verify=False, config=my_config, headers=headers)
Другие вопросы по тегам