我正在尝试使用urllib2和cookiejar登录网站.它会保存会话ID,但是当我尝试打开另一个需要身份验证的链接时,它表示我没有登录.我做错了什么?
这是代码,但对我来说失败了:
import urllib
import urllib2
import cookielib
cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
# Gives response saying that I logged in succesfully
response = opener.open("http://site.com/login", "username=testuser&password=" + md5encode("testpassword"))
# Gives response saying that I am not logged in
response1 = opener.open("http://site.com/check")
解决方法:
你的实现似乎很好……并且应该可行.
它应该发送正确的cookie,但我认为这是因为该网站实际上没有登录你.
你怎么能说它不发送cookie或者你得到的cookie不是认证你的那个.
使用:response.info()查看响应的标题,以查看您实际收到的cookie.
该网站可能没有登录您,因为:
>它检查了您没有设置的User-agent,因为有些站点只能从4个主要浏览器打开以禁止机器人访问.
>该网站可能正在寻找您可能不会发送的特殊隐藏表单字段.
1条建议:
from urllib import urlencode
# Use urlencode to encode your data
data = urlencode(dict(username='testuser', password=md5encode("testpassword")))
response = opener.open("http://site.com/login", data)
此外有一件事很奇怪:
>在发送密码之前,您将对密码进行md5编码. (奇怪)
>这通常由服务器在与数据库进行比较之前完成.
>只有当site.com在javascript中实现md5时才有可能.
>这是一个非常罕见的案例,因为只有0.01%的网站可以做到这一点.
>检查 – 可能是问题,并且您提供哈希表单而不是服务器的实际密码.
>因此,服务器将再次为您的md5哈希计算md5.
查看.. !!