使用mechanize访问HTTP基本认证网页

4 投票
2 回答
2871 浏览
提问于 2025-04-16 07:58

在我现在的程序中,我是这样访问一个需要HTTP基本认证的页面的,这样做效果很好:

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创建的已经有效的认证处理器?

2 个回答

-1

我的脚本一直报同样的错误。以下是我解决这个问题的方法。

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

如果你有表单的话,可能需要用browser.click()来提交它。另外,你可能还需要创建一个“结果网站”的变量,并用urllib2打开它。

-3

这个错误可以忽略。当程序捕捉到这个错误时,它可以正常继续运行。

撰写回答