python urllib2基本身份验证

时间:2013-08-30 13:49:38

标签: python urllib2

您好我正在尝试使用python使用urllib2访问API网址:

import urllib2

url = 'https://XXXXXXXXXX.com/'
username = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
password = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(url)

我不知道这个领域是什么,但我假设我可以使用默认值,即无。

无论如何,我仍然得到401错误:

  

回溯(最近一次调用最后一次):文件“test5.py”,第12行,in          pagehandle = urllib2.urlopen(url)文件“/usr/lib/python2.6/urllib2.py”,第126行,在urlopen中       return _opener.open(url,data,timeout)文件“/usr/lib/python2.6/urllib2.py”,第397行,打开       response = meth(req,response)文件“/usr/lib/python2.6/urllib2.py”,第510行,在http_response中       'http',request,response,code,msg,hdrs)文件“/usr/lib/python2.6/urllib2.py”,第435行,出错       返回self._call_chain(* args)文件“/usr/lib/python2.6/urllib2.py”,第369行,在_call_chain中       result = func(* args)在http_error_default中的文件“/usr/lib/python2.6/urllib2.py”,第518行       引发HTTPError(req.get_full_url(),code,msg,hdrs,fp)urllib2.HTTPError:HTTP错误401:未经授权

所以看起来身份验证有问题。是否最有可能使用realm = None?

谢谢!

1 个答案:

答案 0 :(得分:6)

我无法弄清楚为什么这个方法不起作用,但我使用此代码成功调用了API:

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')

request = urllib2.Request(url)

request.add_header("Authorization", "Basic %s" % base64string) 

result = urllib2.urlopen(request)
        data = result.read()