Feedparser.parse()'SSL:CERTIFICATE_VERIFY_FAILED'

时间:2015-02-02 16:59:25

标签: python python-2.7 ssl rss

我在使用feedparser解析HTTPS rss Feed时遇到此SSL问题,我真的不知道该怎么做,因为我无法找到有关此错误的任何文档,当涉及到feedparser时/ p>

>>> 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"]
[]
>>> 

3 个答案:

答案 0 :(得分:16)

非常感谢cmidi的回答,即{猴子补丁'使用ssl._create_default_https_context = ssl._create_unverified_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!!

答案 1 :(得分:1)

这是由于Python开始应用certificate verification by default for stdlib http clients

可以在this Redhat article中找到有关更改原因的详细说明。还有关于如何控制和解决这种新情况的信息。

以上两个参考文献都解释了如何避免在单个连接中进行证书验证 (这不是供feedparser用户使用的解决方案)

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

当前, feedparser 用户只能通过 monkeypatching 避免证书验证,强烈建议,因为它会影响整个应用程序。

更改整个应用程序行为的代码如下(代码取自PEP-476):

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

There is an issue on the feedparser tracker about thisHow to fix SSL: CERTIFICATE_VERIFY_FAILED?

答案 2 :(得分:0)

确保已安装library(zoo) library(data.table) id_name[, id := na.locf(id), name] id_name[, name := na.locf(name), id] id_name # id name #1: x123 john #2: xy234 marry #3: x123 john #4: xy234 marry

在缺少ca-certificates的docker容器中使用它并仅仅安装它就解决了我的问题。