Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python parse()和#x27;SSL:证书验证失败';_Python_Python 2.7_Ssl_Rss_Feedparser - Fatal编程技术网

Python parse()和#x27;SSL:证书验证失败';

Python parse()和#x27;SSL:证书验证失败';,python,python-2.7,ssl,rss,feedparser,Python,Python 2.7,Ssl,Rss,Feedparser,我在解析HTTPS RSS源时遇到了这个SSL问题,我真的不知道该怎么办,因为在feedparser中找不到任何关于这个错误的文档: >>> import feedparser >>> feed = feedparser.parse(rss) >>> feed {'feed': {}, 'bozo': 1, 'bozo_exception': URLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FA

我在解析HTTPS RSS源时遇到了这个SSL问题,我真的不知道该怎么办,因为在feedparser中找不到任何关于这个错误的文档:

>>> import feedparser
>>> feed = feedparser.parse(rss)
>>> feed
{'feed': {}, 'bozo': 1, 'bozo_exception': URLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)'),), 'entries': []}
>>> feed["items"]
[]
>>> 

感谢您cmidi给出的答案,即使用
ssl来“monkey patch”。\u create\u default\u https\u context=ssl。\u create\u unverified\u context

import feedparser
import ssl
if hasattr(ssl, '_create_unverified_context'):
    ssl._create_default_https_context = ssl._create_unverified_context
feed = feedparser.parse(rss) #<<WORKS!!
导入feedparser
导入ssl
如果hasattr(ssl,“\u创建\u未验证的\u上下文”):
ssl.\u创建\u默认\u https\u上下文=ssl.\u创建\u未验证\u上下文

feed=feedparser.parse(rss)#这是由于Python开始应用

关于这一变化的基本原理,可以在中找到很好的解释。还有关于如何控制和排除这种新情况的信息

前面的两篇参考文献都解释了如何避免单连接中的证书验证(这不是feedparser用户的解决方案):

目前,feedparser用户只能通过monkeypatching来避免证书验证,这是非常不鼓励的,因为它会影响整个应用程序

在应用程序范围内更改行为的代码如下(代码取自PEP-476):


如何修复SSL:CERTIFICATE\u VERIFY\u失败?

确保安装了
ca证书


在docker容器中使用
feedparser
时遇到了这个问题,而docker容器中没有feedparser,只需安装它就解决了我的问题。

您是否有SSL握手捕获?这是您需要的吗?好的,您的客户端似乎拒绝了服务器的证书,并出现了未知的证书颁发机构错误。您有什么版本的python和feedparser?您创建了自签名证书吗?Python 2.7.9和feedparser 5.1.3我没有创建任何证书,这是直接从安装Python和feedparser开始的,另外,我应该注意到,这在之前的Python3中是有效的,但是我不能再在这个项目中使用Python3了。我不确定这是否会对您有所帮助,但这里有一个链接,我认为问题是它还讨论了一个可能的解决方法,一般来说,ssl客户端通常有一个忽略证书验证的选项
import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)
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