4

我在 Python 中使用 Tweepy 运行 REST API(搜索 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中做到这一点或其他方式?谢谢你。

4

5 回答 5

2

在 streaming.py 中,在第 105 行中添加 verify = False 对我有用,如下所示。虽然不建议使用这种方法,因为它会使连接不安全。还没有为此想出解决方法。

stream = Stream(auth, listener, verify = False)
于 2017-04-10T10:47:54.397 回答
2

我遇到了同样的问题,不幸的是,唯一有效的方法是在 Tweepy 的 auth.py 中设置 verify=False(对我来说,Tweepy 位于/anaconda3/lib/python3.6/site-packages/tweepy我的 Mac 上):

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'

于 2018-04-30T15:07:41.473 回答
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)成功验证证书。

于 2020-03-23T15:44:05.017 回答
0

添加verify=False将忽略必须进行的验证,所有数据将以纯文本形式传输,无需任何加密。

pip install certifi

上面的安装修复了错误的握手和 ssl 错误。

于 2018-07-06T07:31:47.560 回答
0

首先,验证您是否可以仅使用代理配置访问 Twitter。如果是这样,您可以在代码中修改此行以包含代理 URL:

self.api = tweepy.API(self.auth)
于 2017-10-29T22:07:38.470 回答