Tôi đang cố gắng tạo chương trình python đăng nhập vào trang web của trường bằng cách sử dụng id và mật khẩu của tôi. Đây là trang chính thức để đăng nhập: https://webapp.pucrs.br/consulta/HTTP POST và GET với cookie để xác thực trong python
Như bạn có thể nhận thấy, hai trường được đặt tên là pr1 và pr2. Trang sử dụng POST để gửi dữ liệu. CSONG, có một cookie được tải xuống khi trang được tải, đó là một JSESSIONID có chứa một giá trị ngẫu nhiên, như tôi đã hiểu, bạn phải trả về tiêu đề của phương thức POST để xác thực đăng nhập.
Tôi đã viết mã sau đây, nhưng trang trả về trên phương thức GET cho biết "Phiên không được khởi tạo", có thể khiến cookie không được gửi lại đúng cách.
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()
Tôi đặt cookie này ở đâu để thông tin đăng nhập được xác thực?
Bạn có thể sử dụng phiên để xử lý cookie tự động. Từ [docs] (http://docs.python-requests.org/en/latest/user/advanced/#session-objects): Đối tượng * Session cho phép bạn duy trì một số thông số nhất định trên các yêu cầu. Nó cũng tồn tại cookie trên tất cả các yêu cầu được thực hiện từ phiên Phiên. * –
@PiotrDobrogost Thật tuyệt vời, cảm ơn bạn! Và mã trông thậm chí còn tốt hơn. – jorgeca
Bây giờ, bạn có thể làm cho câu trả lời của bạn tốt hơn ... –