Facebook图形GET请求使用python请求模块 - 证书验证失败

时间:2012-01-27 09:31:48

标签: python facebook-graph-api python-requests

我正在编写一个简短的python脚本,以便查看几页的喜欢。我正在使用python请求模块。如下所示,存在一个问题,一些关于证书的问题。我对涉及网络的编程相当新,所以对我来说我不应该做什么。 r = requests.get("http://www.google.com/")正确返回了一些内容。

  

追踪(最近一次通话):     r = requests.get(“https://graph.facebook.com/cocacola”)   例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

  1. 使用REQUESTS_CA_BUNDLE环境变量查找配置。
  2. 使用CURL_CA_BUNDLE环境变量检查卷曲兼容性检查。
  3. 如果可以导入certifi包,它会尝试导入证书列表。
  4. 检查您的环境中是否有REQUESTS_CA_BUNDLECURL_CA_BUNDLE之一:

    env | egrep "REQUESTS_CA_BUNDLE|CURL_CA_BUNDLE"
    

    如果设置了其中一个,则在验证证书时,请求可能正在使用该配置。如果没有,那么请求可能正在使用certifi。在这种情况下,可能值得更新它:

    pip install -U certifi
    

    如果失败,请尝试将verify=False传递给requests.get,以使其跳过验证步骤。我建议解决真正的问题,而不是仅仅关闭它,但这可能会帮助你找到它的底部。

答案 1 :(得分:2)

您安装了certifi吗?最近也出现了类似的问题。由于GPL许可问题,Kenneth Reitz和他不得不将SSL许可证捆绑到另一个回购。

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

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

有关许可问题的更多讨论可在此Github Issue thread上找到(完全弃名:我是该主题的原始海报)。

如果新的certifi无法修复,您可能需要尝试Requests Github Issue page。他们是一个非常敏感和友好的社区!

修改:如果最新的certifi无法修复,我强烈推荐其他海报的建议来尝试verify=False