今天使用python进行调用API的操作中遇到了两个问题。
其一,报“urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed”错误。 原因在于python 2.7.9之后需要对SSL证书进行验证。此处我进行了并不安全的简化操作,绕过SSL的认证。
import ssl
context = ssl._create_unverified_context()
urllib2.urlopen(request, context=context)
上述是在调用指出指定context进行单次的绕过验证,如果需要全局应用,则需修改全局变量ssl._create_default_https_context
ssl._create_default_https_context = ssl._create_unverified_context
其二,已经构建了正确的用户名密码却仍然报“urllib2.HTTPError: HTTP Error 401: Unauthorized”
passwordManager = urllib2.HTTPPasswordMgrWithDefaultRealm()
passwordManager.add_password(None, apiurl, username, password)
handler = urllib2.HTTPBasicAuthHandler(passwordManager)
检查后发现原因在于编码错误,添加
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
之后,问题解决。