访问https站点python(urllib2,请求)

时间:2012-07-11 12:24:20

标签: python https urllib2 python-requests

我正在尝试访问以下网站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不同。虽然不太确定如何做到这一点......

由于

3 个答案:

答案 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)

如果某个机构遇到同样的问题,只需添加答案即可。

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

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

使用某些库(例如pycUrlhttplib)可能是直接提供HTTPS支持的正确选择