在我当前的程序中,我正在访问像这样的 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 库,它可以轻松地完成类似的事情。不幸的是,在使用 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
我该如何解决这个问题?或者我可以让 mechanize 在我的第一个代码段中使用 urllib2 创建的已经工作的 authhander 吗?
最佳答案
我的脚本抛出同样的错误。这是我修复它的方法。
browser.add_password(url, username, password, realm)
urllib2.urlopen(url)
您可能需要使用 browser.click() 来提交您的表单(如果有)和/或创建一个“结果站点”变量并使用 urllib2 打开它。
关于python - 使用 mechanize 访问经过 HTTP Basic 身份验证的网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344932/