使用urllib2进行Python认证

4 投票
2 回答
5462 浏览
提问于 2025-04-15 12:20

我正在尝试用Python从一个叫vsearch.cisco.com的网站下载文件。

[python]

#Connects to the Cisco Server and Downloads files at the URL specified

import urllib2

#Define Useful Variables

url = 'http://vsearch.cisco.com'
username = 'xxxxxxxx'
password = 'xxxxxxxx'
realm = 'CEC'

# Begin Making connection

# Create a Handler -- Also could be where the error lies

handler = urllib2.HTTPDigestAuthHandler()
handler.add_password(realm,url,username,password)

# Create an Opener

opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)

try:
    urllib2.urlopen(url)
    print f.read()

except urllib2.HTTPError, e:
    print e.code
    print e.header

[/python]

我遇到的错误是ValueError: AbstractDigestAuthHandler不知道基本的认证方式。

我尝试过使用基本的HTML认证处理器,甚至HTTPS处理器,但都无法让我访问。不过,这个错误和其他错误不一样,其他错误只是401 HTML错误。

有没有什么建议可以让我解决这个问题?

2 个回答

0

关于我在测试中尝试的内容(http://devel.almad.net/trac/django-http-digest/browser/djangohttpdigest/tests/test_simple_digest.py),错误可能出在你的网址上。为了让它正常工作,我在网址前面加上了 http:// 部分,而不仅仅是主机名。

8

一个“密码管理器”可能会有所帮助:

    mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    mgr.add_password(None, url, user, password)        
    urllib2.build_opener(urllib2.HTTPBasicAuthHandler(mgr),
                         urllib2.HTTPDigestAuthHandler(mgr))

撰写回答