使用Mechanize for Python抓取脚本的HTTP错误401

时间:2014-06-04 18:11:47

标签: python http authentication mechanize login-script

我正在编写一个脚本,使用mechanize自动从我的公司目录网站中删除信息。但是,当我运行脚本时,解释器会在br.open(url)上返回 _response.httperror_seek_wrapper:HTTP错误401:需要授权。 这是我的代码中解释器遇到错误的部分。

from sys import path 
path.append("./mechanize/mechanize")
import _mechanize 
from base64 import b64encode 

def login (url, username, password):
    b64login = b64encode('%s:%s' % (username, password))
    br = _mechanize.Browser()
    br.set_handle_robots(False)
    br.addheaders.append(('Authorization','Basic %s' % b64login)) 
    br.open(url)
    r = br.response()
    print r.read()

我尝试访问的网站是我公司网络中的内部网站,它使用GlobalSign证书在公司发布的计算机上进行身份验证。

我确信我输入的身份验证信息是正确的,我到处寻找解决方案。有关如何解决此问题的任何提示?谢谢!

1 个答案:

答案 0 :(得分:0)

看起来您的身份验证方法不匹配。您声明您的公司使用GlobalSign证书,但您的代码使用的是基本身份验证。他们不等于!!

通过简要查看Mechanize documentation(受限制),您不会通过手动添加标头来实现身份验证。它有自己的add_password方法来处理身份验证。

此外,作为一般的HTTP身份验证策略,您应 NOT 通过自行添加身份验证标头来使用抢先身份验证。您应该使用必要的身份验证(基于库的文档)设置代码,并让它处理身份验证协商。