我正在尝试访问以下网站https://electionbuddy.com/elections/4322/results
我尝试过使用handler = urllib2.HTTPBasicAuthHandler(password_mgr)
等和requests
,但是webapp只是发回一个页面,说我没有权限(没有用户/传递去的地方)。我尝试过萤火虫,但却无法从中获得任何明显的信息。如果需要,我可以编辑和附加。
我怎样才能登录这样的网站?正如Burhan所提到的,这种情况是您需要“登录保存已发送的cookie并将其发送到下一个请求发送到结果页面”。
要跟进,为什么不做以下工作
import requests
payload = {'user_username': 'xxxxxxxxx', 'user_password': 'xxxxxxx'}
r = requests.post("https://electionbuddy.com/login", data=payload)
r = requests.get('https://electionbuddy.com/elections/xxxx/results', cookies=r.cookies)
print r.text
似乎有一个身份验证令牌,与会话ID不同。虽然不太确定如何做到这一点......
由于
答案 0 :(得分:3)
我认为此网站会在您登录时为您创建会话cookie。 首先尝试登录,看看是否会抛出cookie,如果是,请将cookie提供给您需要的页面。 你熟悉cookielib吗?
from urllib2 import *
import cookielib
cj = cookielib.CookieJar()
opener = build_opener(
HTTPHandler(), HTTPSHandler(), HTTPErrorProcessor(),
HTTPRedirectHandler(), HTTPCookieProcessor(cj))
params = urllib.urlencode(dict(USER=user, PASSWORD=pw, action='Login'))
# Response here will have cookies, use info() to show
response = opener.open(loginurl, params)
print response.info()
# cookies automatically sent to the page you wanted
response2 = opener.open(your_url)
答案 1 :(得分:0)
我曾经不得不访问一个受用户名/密码保护的网址,并使用以下方法解决了它
import urllib2
import base64
theurl = 'http://abc.com/A.htm'
username='AAA'
password='BBB'
req = urllib2.Request(theurl)
base64string = base64.encodestring(
'%s:%s' % (username, password))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
try:
handle = urllib2.urlopen(req)
except IOError, e:
print "It looks like the username or password is wrong."
content = handle.read()
希望这有帮助
答案 2 :(得分:-1)