【问题标题】:Tweepy SSLError regarding ssl certificate关于 ssl 证书的 Tweepy SSLError
【发布时间】:2016-09-17 21:07:25
【问题描述】:

我在 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中做到这一点或其他方式?谢谢。

【问题讨论】:

  • Wei,只是想知道您是否找到了解决此问题的任何永久解决方案,而不是将 SSL 验证标志设置为 false。我面临着类似的问题 - 但它是随机的。
  • 感谢您的提问。不幸的是……现在没有运气了。现在我只是试图避免连接该网络并使用具有不同网络安全设置的其他网络。您还有其他解决方案吗?

标签: python ssl tweepy twitter-rest-api


【解决方案1】:

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

stream = Stream(auth, listener, verify = False)

【讨论】:

  • 如何为“favourite”等通用 API 方法做到这一点。
【解决方案2】:

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

self.api = tweepy.API(self.auth)

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,不幸的是,唯一有效的方法是在 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'

    【讨论】:

    • 这对我有用,即使我的证书不是 .cer 而是 .pem。只要文件路径正确,就可以了。
    【解决方案4】:

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

    pip install certifi
    

    以上安装修复了糟糕的握手和 ssl 错误。

    【讨论】:

      【解决方案5】:

      对于可能像我一样偶然发现此问题的任何人,我遇到了类似的问题,因为我的公司正在使用代理,并且在尝试验证代理的证书时 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)
      

      您必须将&lt;path to pem file&gt; 替换为导出文件的路径。这应该允许requests(和tweepy)成功验证证书。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2021-07-20
        相关资源
        最近更新 更多