Python中的cookielib和表单认证问题
InstaMapper 是一个 GPS 追踪服务,当你在 InstaMapper 网页上实时查看设备位置时,它会更频繁地更新设备的位置。我想让这个更新一直保持,所以我打算写一个 Python 脚本,定期登录我的账户并访问这个页面。
import urllib2, urllib, cookielib
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
params = urllib.urlencode(dict(username_hb='user', password_hb='hunter2'))
opener.open('http://www.instamapper.com/fe?action=login', params)
if not 'id' in [cookie.name for cookie in cj]:
raise ValueError, "Login failed"
# try secured page
resp = opener.open('http://www.instamapper.com/fe?page=track&device_key=abc')
print resp.read()
resp.close()
每次都会出现 ValueError 错误。如果我去掉这个错误并读取响应,页面会认为我禁用了 cookies,从而阻止我访问这个页面。为什么 cj 没有获取到 InstaMapper 的 cookie 呢?
有没有更好的方法让追踪服务认为我一直在查看我的账户呢?
2 个回答
0
你有没有想过有没有一种特别的cookie是用来阻止你登录的?我建议你使用Wireshark或者其他工具,看看在你手动登录时,是否有cookie会发生变化(比如通过javascript等方式)。
(道德提醒:你可能在违反服务条款,这样可能会给公司带来比你支付的费用更高的成本。我以前也做过类似的服务,每次额外或未计划的位置更新费用大约在0.01到0.05美元之间,但我相信现在可能已经降下来了。)
0
action=login
是参数的一部分,应该按照这个意思来处理:
params = urllib.urlencode(dict(action='login', username_hb='user', password_hb='hunter2'))
opener.open('http://www.instamapper.com/fe', params)
(另外,这个特定的用户名/密码组合是无效的,我假设你在实际代码中使用的是有效的用户名和密码,不然登录会失败。)