Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法
一個搭建在SAE上的Django應(yīng)用,使用新浪微博提供的Python?SDK已經(jīng)穩(wěn)定運(yùn)行一年有余,但最近開始持續(xù)出現(xiàn)微博認(rèn)證失敗的狀況。
摘錄微博python?SDK的錯誤提示如下所示:
ERROR:django.request:Internal Server Error: /weibo/auth/ Traceback (most recent call last):File "/usr/local/sae/python/3rd/django-1.5/django/core/handlers/base.py", line 115, in get_responseresponse = callback(request, *callback_args, **callback_kwargs)File "/data1/www/htdocs/838/app/1/mysite/views.py", line 42, in authres = weibo_util.keep_user(code,api,redirect_uri)File "/data1/www/htdocs/838/app/1/util/weibo_util.py", line 86, in keep_userr = client.request_access_token(code,redirect_url)File "/data1/www/htdocs/838/app/1/weibo.py", line 255, in request_access_tokencode = code, grant_type = 'authorization_code')File "/data1/www/htdocs/838/app/1/weibo.py", line 114, in _http_postreturn _http_call(url, _HTTP_POST, authorization, **kw)File "/data1/www/htdocs/838/app/1/weibo.py", line 155, in _http_callresp = urllib2.urlopen(req)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 154, in urlopenreturn opener.open(url, data, timeout)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 431, in openresponse = self._open(req, data)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 449, in _open'_open', req)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 409, in _call_chainresult = func(*args)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 1240, in https_opencontext=self._context)File "/usr/local/sae/python/lib/python2.7/urllib2.py", line 1197, in do_openraise URLError(err) URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:606)> yq66問題的原因是“SSL: CERTIFICATE_VERIFY_FAILED”。
Google到了這樣一篇博文,對解決問題提供了很大的幫助,原文鏈接:http://reality0ne.com/2014/12/816/
Python 升級到 2.7.9 之后引入了一個新特性,當(dāng)使用urllib.urlopen打開一個 https 鏈接時,會驗(yàn)證一次 SSL 證書。
而當(dāng)目標(biāo)網(wǎng)站使用的是自簽名的證書時就會拋出一個 urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)> 的錯誤消息,詳細(xì)信息可以在這里查看(https://www.python.org/dev/peps/pep-0476/)。
解決方案包括下列兩種方式:
1. 使用ssl創(chuàng)建未經(jīng)驗(yàn)證的上下文,在urlopen中傳入上下文參數(shù)
import ssl import urllib2context = ssl._create_unverified_context() print urllib2.urlopen("https://www.12306.cn/mormhweb/", context=context).read()2. 全局取消證書驗(yàn)證
import ssl import urllib2ssl._create_default_https_context = ssl._create_unverified_contextprint urllib2.urlopen("https://www.12306.cn/mormhweb/").read()?在此使用方法2,修改weibo.py,在第155行添加下列代碼:
import ssl ssl._create_default_https_context = ssl._create_unverified_context至此,問題圓滿解決!
本文鏈接:http://bookshadow.com/weblog/2015/04/22/sae-python-weibo-sdk-certificate-verify-failed/
請尊重作者的勞動成果,轉(zhuǎn)載請注明出處!書影博客保留對文章的所有權(quán)利。
?
總結(jié)
以上是生活随笔為你收集整理的Python [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pywebQQ-----linux下we
- 下一篇: [RabbitMQ]RabbitMQ原理