使用mechanize访问HTTP基本认证网页
在我现在的程序中,我是这样访问一个需要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
这个错误可以忽略。当程序捕捉到这个错误时,它可以正常继续运行。