python - 如何在运行程序和请求数据时使用 Python 保持登录网站?

标签 python cookies urllib2

我找到了一种使用 Python 保持网站登录状态的方法。问题是,每隔一段时间,我就会断开连接并注销。我猜测 session 超时了,但我不知道如何修复它。

我使用了 Firefox 的 Live HTTP Headers 插件,并将登录请求中的 header 复制到我的程序中。

import urllib
import urllib2
import cookielib

data = urllib.urlencode({"inUserName":"MY EMAIL", "inUserPass":"MY PASSWORD"})
jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(('User-agent', 'Mozilla/5.0'))
opener.addheaders.append(('Referer', 'http://www.locationary.com/'))
opener.addheaders.append(('Cookie','site_version=REGULAR; __utma=47547066.601656247.1344371114.1344602507.1344606239.16; __utmz=47547066.1344371114.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); nickname=jacob501; jforumUserId=1; locaCountry=1227; locaState=null; locaCity=Atlanta; PSESSIONID=533e2fb9fda008d5d16bfbdc9b9a6afed0e5ac54; Locacookie=enable; sortOrder=1; JSESSIONID=DE58AC8BC78D1DF20BF338E195336E58; __utmc=47547066; __utmb=47547066.6.10.1344606239'))
request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data)
response = opener.open(request)
page = opener.open(url).read()
soup = BeautifulSoup(page)

我使用了cookieliburrlib/urllib2。真正使它起作用的cookie是非常长的,但我真的不知道这一切意味着什么,我只是从附加组件中复制了它。如果我的连接断开,我会转到浏览器并再次登录并从附加组件获取新的 cookie。就像我之前说的,我猜这与 session 或 sessionid 或其他东西有关,但我不知道如何才能使我始终登录。

谢谢。

编辑

有人可以告诉我为什么这是一个糟糕的问题还是我只是愚蠢? -1 为了什么?

编辑2

好的!如果我没有保持登录状态,那么有没有办法让我的连接/cookie 不工作?

编辑3

除了自己去 Firefox 插件之外,我不知道如何获取新的 cookie...哈哈

编辑4

好的。我做了一个新的测试程序:

import urllib
import urllib2
import cookielib
import re

url = 'http://www.locationary.com/home/index2.jsp'

data = urllib.urlencode({"inUserName":"email", "inUserPass":"password"})
jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(('User-agent', 'Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1'))
opener.addheaders.append(('Referer', 'http://www.locationary.com/'))
opener.addheaders.append(('Cookie','site_version=REGULAR; __utma=47547066.601656247.1344371114.1344612897.1344615635.18; __utmz=47547066.1344371114.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); nickname=jacob501; jforumUserId=1; locaCountry=1227; locaState=null; locaCity=Atlanta; PSESSIONID=533e2fb9fda008d5d16bfbdc9b9a6afed0e5ac54; Locacookie=enable; sortOrder=1; JSESSIONID=781FD0C497FB596954BB78B1323215F6; __utmc=47547066; __utmb=47547066.9.10.1344615635'))
request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data)
response = opener.open(request)
page = opener.open(url).read()
print re.findall(r'<title>(.*)</title>', page)
h = response.info().headers
print h

输出:

['Home Page']
['Server: nginx/1.0.8\r\n', 'Date: Fri, 10 Aug 2012 16:50:47 GMT\r\n', 'Content-Type: text/html;charset=UTF-8\r\n', 'Transfer-Encoding: chunked\r\n', 'Connection: close\r\n', 'P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"\r\n']

最佳答案

为什么不尝试使用 requests模块并看看这是否有区别?

看一下示例 here ;它非常容易使用,内置的 cookie jar 可能会有所帮助,即使只是为了防止您在 Python 的 HTTP 库中意外犯错误。

关于python - 如何在运行程序和请求数据时使用 Python 保持登录网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905071/

相关文章:

javascript - CLI 调用页面后以编程方式访问 HTTP 流量(通过 wget 或 urllib2 等)

python - 使用 urllib2.urlopen 时获取 "TypeError: unhashable type"

python - 我可以为重置索引指定名称吗?

python - 为什么 scipy.stats.nanmean 给出与 numpy.nansum 不同的结果?

python - 为什么 zip 对象消失了?

ruby-on-rails - rails 中 CGI::Session::CookieStore::TamperedWithCookie 异常的可能原因是什么

python - 在 isin() 中处理空字符串的 Pandaic 方法

php - 如何使用 PHP 自动填充输入字段并保存 cookie?

node.js - 仅 http cookie + token : double job?

python - 通过 Tor 连接时 SocksiP 失败