python - 使用 mechanize 访问经过 HTTP Basic 身份验证的网页

标签 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 库,它可以轻松地完成类似的事情。不幸的是,在使用 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/

相关文章:

python - 获取 pandas 数据对象的 x,y 样式坐标

ruby Mechanize : How to retrieve an attachment from a GET

python - 如何通过抓取从ucsc基因组浏览器中提取表浏览器结果

python - 运行 OpenSSL 系统调用

Python 属性错误 : 'module' object has no attribute 'Serial'

python - 根据标点符号区分文本大小写

python - 删除了InDjango110警告: The context_instance argument of render_to_string is deprecated

Python Mechanize 以跟踪图像链接?

python - 尽管 mechanize 可以工作,但 urllib.urlopen 不适用于此 url

python-2.7 - Mechanize 控件名称 "None"