我在使用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"]
[]
>>>
答案 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 this:How 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容器中使用它并仅仅安装它就解决了我的问题。