我正在使用Python中的Tweepy运行REST API(Search API)。我在家里完成了这个项目,它完全没问题。但现在我正在不同的网络中处理这个问题,并收到了错误消息。
SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
我的代码是这样的。
auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
我找到了这篇文章
Python Requests throwing up SSLError
并设置以下代码(verify = false
)可能是一个快速的解决方案。有没有人知道如何做到这一点或其他方式在tweepy?谢谢。
答案 0 :(得分:2)
在streaming.py中,在第105行添加verify = False为我做了诀窍,如下所示。虽然不建议使用这种方法,因为它会使连接不安全。尚未能为此提出解决方法。
stream = Stream(auth, listener, verify = False)
答案 1 :(得分:1)
我遇到了同样的问题,不幸的是唯一有用的是在Tweepy的auth.py中设置verify = False(对我来说,Tweepy位于我Mac上的/anaconda3/lib/python3.6/site-packages/tweepy
):
resp = requests.post(self._get_oauth_url('token'),
auth=(self.consumer_key,
self.consumer_secret),
data={'grant_type': 'client_credentials'},
verify=False)
编辑:
在公司防火墙后面,存在证书问题。在Chrome中转到设置 - >高级 - >证书并下载您的公司CA证书。然后,在Tweepy binder.py中,在session = requests.session()
下面添加
session.verify = 'path_to_corporate_certificate.cer'
答案 2 :(得分:0)
首先,验证您是否可以使用代理配置访问Twitter。如果是这样,您可以在代码上修改此行以包含代理URL:
self.api = tweepy.API(self.auth)
答案 3 :(得分:0)
添加verify=False
将忽略必须进行的验证,所有数据将以纯文本格式传输,而无需进行任何加密。
pip install certifi
以上安装修复了错误的握手和ssl错误。
答案 4 :(得分:0)
对于任何可能像我一样迷失于此的人,我都遇到了类似的问题,因为我的公司正在使用代理,并且在尝试验证代理的证书时SSL检查失败。
解决方案是将代理的根证书导出为.pem
文件。然后,您可以通过执行以下操作将此证书添加到certifi
的信任存储中:
import certifi
cafile = certifi.where()
with open(r<path to pem file>, 'rb') as infile:
customca = infile.read()
with open(cafile, 'ab') as outfile:
outfile.write(customca)
您必须将<path to pem file>
替换为导出文件的路径。这应该允许requests
(和tweepy
)成功验证证书。