python用requests请求百度接口报“SSL: CERTIFICATE_VERIFY_FAILED”

原创 2015年11月18日 16:58:10

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

今天想试用一下百度的语音识别API,附带步骤:

1. 先去百度开放云平台注册,成为开发者,审核可能需要时间的,我去年申过现在账号还在

2. 然后创建一个应用

3.为创建完的应用添加服务,有俩,语音识别和语音生成

4. 这样我就有一个调用他语音识别接口的access_token了,这个token由于我采用的是API For Rest,要拿API_keysecret_key通过一个http请求获得,问题就出在这儿了


我用request按照他文档的样子Post了一下,又Get了一下都报一个验证失败的错误。

requests.post('https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxx&client_secret=xxxxxxx').content

requests.get('https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxx&client_secret=xxxxxxx').content

他告诉我:

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)


找了一下,有人说原因是这样的:

Python 2.7.9 之后引入了一个新特性
当你urllib.urlopen一个 https 的时候会验证一次 SSL 证书 
当目标使用的是自签名的证书时就会爆出一个 
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> 的错误消息


确实我用urllib试了一下结果一样,requests跟urllib是一样的。


那么要解决这个问题,PEP-0476的文档说

For users who wish to opt out of certificate verification on a single connection, they can achieve this by providing the contextargument to urllib.urlopen :

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)
It is also possible, though highly discouraged , to globally disable verification by monkeypatching the ssl module in versions of Python that implement this PEP:

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

就是说你可以禁掉这个证书的要求,urllib来说有两种方式,一种是urllib.urlopen()有一个参数context,把他设成ssl._create_unverified_context

或者修改现在的全局默认值

_create_unverified_https_context

ssl._create_default_https_context

ssl._create_unverified_context

测试了一下,确实可以,返回了几个token,那么requests呢,难道必须设置全局变量吗。

其实requestpostget都有一个叫verify的参数,把他设成False就可以了。

print requests.get('https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxx&client_secret=xxxxxxxx', verify=False).content














Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法

一个搭建在SAE上的Django应用,使用新浪微博提供的Python SDK已经稳定运行一年有余,但最近开始持续出现微博认证失败的状况。 摘录微博Python SDK的错误提示如下所示: ER...

python内置的urllib模块不支持https协议的解决办法

Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常。寻根朔源发现是python内...

Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法

http://bookshadow.com/weblog/2015/04/22/sae-python-weibo-sdk-certificate-verify-failed/ 一个搭建在SA...

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

今天在freebsd上 使用easy_install scrapy命令来安装scrapy, 结果报错: [SSL: CERTIFICATE_VERIFY_FAILED] certificate v...
  • huyoo
  • huyoo
  • 2015年02月24日 22:49
  • 9370

七牛python sdk 上传报SSL: CERTIFICATE_VERIFY_FAILED]

本文不仅仅讲的是如何解决使用七牛sdk中所遇到的问题,而是由此引申出在遇到该问题时不同python环境下的解决办法问题描述:底层报错为ssl.SSLError: [SSL: CERTIFICATE_V...

Python网络爬虫报错“SSL: CERTIFICATE_VERIFY_FAILED”的解决方案

import urllib.request weburl = "https://www.douban.com/" webheader = { 'Accept': 'text/html, ap...

“error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”解决方法

使用git通过https方式从github clone git repo源码时,报错如下: 1 2 3 Cloning into 'git'... ...
  • ee230
  • ee230
  • 2015年01月04日 14:08
  • 12069

python requests发送HTTPS 请求-不验SSL证书

有时为了方便,在发送请求时把验SSL正式关掉, 设置verify为False, import requests from requests import Request, Session f...
  • qdulgh
  • qdulgh
  • 2016年08月30日 19:08
  • 9079

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581

python requests模块请求微信企业号获取token的时候出现: requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED...

【python】SSL: CERTIFICATE_VERIFY_FAILED

在使用python的rquests库, 通过https协议get方法访问了某个web服务接口, 结果提示: [SSL: CERTIFICATE_VERIFY_FAILED] certificate ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python用requests请求百度接口报“SSL: CERTIFICATE_VERIFY_FAILED”
举报原因:
原因补充:

(最多只允许输入30个字)