我正试图创建一个Python程序,使用我的ID和密码登录到我的大学的网站。这是登录的正式页面:https://webapp.pucrs.br/consulta/HTTP POST和GET使用Cookie进行身份验证在Python中
您可能注意到,这两个字段分别命名为pr1和pr2。该页面使用POST发送数据。此外,在加载页面时会下载一个cookie,它是一个包含随机值的JSESSIONID,据我所知,您必须返回POST方法的标题以验证登录。
我写了下面的代码,但GET方法的返回页面显示“会话未初始化”,可能导致cookie未正确发回。
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()
我在哪里放这个cookie,以便登录身份验证?
您可以使用会话自动处理cookie。从[docs](http://docs.python-requests.org/en/latest/user/advanced/#session-objects):* Session对象允许您在请求中保留某些参数。它还会在Session实例的所有请求中保持cookie。* – 2012-04-20 15:15:08
@PiotrDobrogost很酷,谢谢!代码看起来更好。 – jorgeca 2012-04-20 15:33:44
现在,你可以让你的答案更好... – 2012-04-20 15:52:47