使用mechanize访问HTTP Basic身份验证的网页

时间:2010-12-03 11:09:47

标签: python mechanize

在我当前的程序中,我正在访问这样的HTTP Basic身份验证页面,这非常有效:

import urllib2
url = 'http://test.localdomain/test.pl'
realm = 'Test DB'
username = 'foo'
password = 'bar'
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm, uri , username, password)
opener = urllib2.build_opener(auth_handler)
data = opener.open(url).read()

现在我想在登录后单击该页面上的一个按钮。我找到了Python的机械化库,它可以轻松地完成这样的操作。不幸的是,在使用mechanize时,我无法成功地执行与上面相同的基本身份验证。这就是我的尝试:

from mechanize import Browser
url = 'http://test.localdomain/test.pl'
realm = 'Test DB'
username = 'foo'
password = 'bar'
browser = Browser()
browser.add_password(url, username, password, realm)
browser.open(url)

但后来我得到以下例外:

HTTP Error refresh: The HTTP server returned a redirect error that would lead to an     
infinite loop.
The last 30x error message was:
OK

我该如何解决这个问题?或者我可以让机械化在我的第一个片段中使用由urllib2创建的已经正常工作的authhander吗?

2 个答案:

答案 0 :(得分:-1)

我的脚本抛出同样的错误。这就是我修复它的方法。

browser.add_password(url, username, password, realm)
urllib2.urlopen(url)

您可能需要使用browser.click()提交表单(如果有)和/或创建“结果网站”变量并使用urllib2打开它。

答案 1 :(得分:-3)

错误可以忽略。在捕捉它时,程序可以定期继续。