3

我正在编写一个简短的 python 脚本来检查几页的喜欢数量。我正在使用 python 请求模块。如下所示,有一个问题,与证书有关。我对涉及网络的编程相当陌生,所以对我来说我应该做什么并不明显。r = requests.get("http://www.google.com/")正确返回了一些东西。

Traceback(最近一次通话最后一次):r = requests.get(" https://graph.facebook.com/cocacola ")routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

谢谢!

4

2 回答 2

3

该错误看起来像是来自 OpenSSL。您的环境中可能有一些配置导致请求将证书位置设置为不包含所需证书的位置。

尝试调查 Requests 检查证书的可能方式:

  1. REQUESTS_CA_BUNDLE它使用环境变量查找配置。
  2. CURL_CA_BUNDLE它使用环境变量检查 curl 兼容性检查。
  3. certifi如果可以导入包,它会尝试导入证书列表。

检查您的环境中是否有REQUESTS_CA_BUNDLE或之一:CURL_CA_BUNDLE

env | egrep "REQUESTS_CA_BUNDLE|CURL_CA_BUNDLE"

如果设置了其中之一,则请求可能在验证证书时使用该配置。如果不是,那么 Requests 可能正在使用certifi. 在这种情况下,也许值得更新它:

pip install -U certifi

如果做不到这一点,请尝试传递verify=Falserequests.get它以使其跳过验证步骤。我建议解决真正的问题,而不是仅仅将其关闭,但这可能会帮助您深入了解它。

于 2012-01-27T10:11:14.307 回答
2

你安装了证书吗?最近一个类似的问题也让我很生气。由于 GPL 许可问题,Kenneth Reitz 和他的同事不得不将 SSL 许可包移动到另一个 repo。

我刚刚安装了最新certifi的 pypi 并尝试了以下操作,它似乎工作正常:

>>> import requests
>>> r = requests.get("https://graph.facebook.com/cocacola") 
>>> r
<Response [200]>

更多关于许可问题的讨论可以在这个Github 问题线程Full-discolure:我是那个线程的原始发布者)上找到。

如果一个新certifi的没有修复它,你可能想试试Requests Github Issue page。他们是一个非常敏感和友好的社区!

编辑:如果最新certifi版本无法修复它,我强烈推荐其他发帖者的建议尝试verify=False

于 2012-01-27T10:19:09.573 回答