身份验证失败登录网站

时间:2017-05-18 12:42:03

标签: python python-3.x cookies python-requests

我正在尝试使用以下代码中的代码登录此网站:https://portals.broadinstitute.org/cmap/index.jsphttps://stackoverflow.com/a/22547541/651779。这曾经正常工作。但是,现在运行时,我的授权被拒绝了。用户名和密码是正确的。

代码下方:

login_url = 'http://www.broadinstitute.org/cmap/j_security_check'

login_values = urllib.parse.urlencode({'j_username': user,
                                       'j_password': pwd, 
                                       'submit': 'sign in'})
print(login_url+'?'+login_values)

这会给出网址(填写用户名和密码):

http://www.broadinstitute.org/cmap/j_security_check?j_username=<username>&j_password=<password>&submit=sign+in

当我在浏览器中粘贴它时,它会正确登录我,所以我知道用户名和密码仍然很好。

payload_submit_signature = bytes(login_values, 'ascii')

cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(
    urllib.request.HTTPRedirectHandler(),
    urllib.request.HTTPHandler(debuglevel=0),
    urllib.request.HTTPSHandler(debuglevel=0),
    urllib.request.HTTPCookieProcessor(cj))

opener.open(submit_signature_url) #First call to capture the JSESSIONID
resp = opener.open(login_url, payload_submit_signature)
for cookie in cj:
    print (cookie.name, cookie.value, cookie.domain, cookie.expires, cookie.secure) #etc etc

根据之前的堆栈回答,需要首先设置cookie。上面的印刷品给出了

JSESSIONID B2CFD19CBB9105EC2DC4D75DD7C3C0C9 portals.broadinstitute.org None True

所以这似乎有效。

print(resp.read())

这会在填写错误的用户密码组合时提供相同的hmtl页面。怎么没有正确发送这些?

1 个答案:

答案 0 :(得分:1)

使用requests,此代码适用于我

login = 'https://portals.broadinstitute.org/cmap/j_security_check'
index = 'https://portals.broadinstitute.org/cmap/index.jsp'
username = 'my username'
password = 'my password'
data = { 'j_username':username, 'j_password':password, 'submit':'sign+in' }

ses = requests.Session()
ses.get(index)    # you need this to get cookies #
post = ses.post(login, data=data)

print(ses.cookies.get_dict())
print(post.url)
print('sign out' in post.content)

结果:

{'JSESSIONID': 'A86EDB10DB2BC063EFE7A528F5E88A77'}
https://portals.broadinstitute.org/cmap/index.jsp
True