Próbuję utworzyć program python, który loguje się do witryny mojego uniwersytetu za pomocą mojego identyfikatora i hasła. Jest to strona oficjalna do logowania: https://webapp.pucrs.br/consulta/HTTP POST i GET z plikami cookie do uwierzytelniania w python
Jak można zauważyć, dwa pola mają nazwy pr1 i pr2. Strona korzysta z POST do wysyłania danych. TAKŻE istnieje plik cookie, który jest pobierany po załadowaniu strony, jest to JSESSIONID zawierający losową wartość, która, jak rozumiem, musisz zwrócić w nagłówku metody POST, aby uwierzytelnić logowanie.
Napisałem poniższy kod, ale strona powrotu w metodzie GET mówi "sesja nie została zainicjowana", prawdopodobnie dlatego, że plik cookie nie został poprawnie wysłany.
from urllib2 import Request, build_opener, HTTPCookieProcessor, HTTPHandler
import httplib, urllib, cookielib, Cookie, os
conn = httplib.HTTPConnection('webapp.pucrs.br')
#COOKIE FINDER
cj = cookielib.CookieJar()
opener = build_opener(HTTPCookieProcessor(cj),HTTPHandler())
req = Request('http://webapp.pucrs.br/consulta/principal.jsp')
f = opener.open(req)
html = f.read()
for cookie in cj:
c = cookie
#FIM COOKIE FINDER
params = urllib.urlencode ({'pr1':111049631, 'pr2':<pass>})
headers = {"Content-type":"text/html",
"Set-Cookie" : "JSESSIONID=70E78D6970373C07A81302C7CF800349"}
# I couldn't set the value automaticaly here, the cookie object can't be converted to string, so I change this value on every session to the new cookie's value. Any solutions?
conn.request ("POST", "/consulta/servlet/consulta.aluno.ValidaAluno",params, headers) # Validation page
resp = conn.getresponse()
temp = conn.request("GET","/consulta/servlet/consulta.aluno.Publicacoes") # desired content page
resp = conn.getresponse()
print resp.read()
Gdzie mogę umieścić ten plik cookie, aby logowanie zostało uwierzytelnione?
Możesz użyć sesji do automatycznego obsługiwania plików cookie. Od [docs] (http://docs.python-requests.org/en/latest/user/advanced/#session-objects): Obiekt * Session umożliwia utrzymywanie pewnych parametrów pomiędzy żądaniami. Utrzymuje również pliki cookie we wszystkich żądaniach wysłanych z instancji sesji. * –
@PiotrDobrogost To fajne, dziękuję! Kod wygląda jeszcze lepiej. – jorgeca
Teraz możesz poprawić swoją odpowiedź ... –