3

我正在尝试访问以下站点https://electionbuddy.com/elections/4322/results

我试过使用handler = urllib2.HTTPBasicAuthHandler(password_mgr)etc 和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 不同。虽然不太清楚如何去做这件事......

谢谢

4

3 回答 3

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)
于 2012-07-11T12:35:01.010 回答
0

我曾经不得不访问一个受用户名/密码保护的 url,并使用以下方法解决了它

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()

希望这可以帮助

于 2012-07-11T12:36:24.630 回答
-1

只需添加答案,如果有人偶然发现同样的问题。

有问题的 url 是安全的,即使用 HTTPS。

所以其他地方建议的 HTTP 基本身份验证显然不起作用。基本身份验证适用于纯 http。HTTPS是加密的。

使用诸如pycUrlhttplib之类的库可能是正确的选择,它们完全提供 HTTPS 支持

于 2015-02-12T21:33:07.780 回答