2012-01-27 87 views
3

我正在写一个简短的python脚本来查找一些喜欢的页面。我正在使用python requests模块。如下所示,有一个问题,关于证书的问题。我对于涉及网络的编程相当陌生,因此对我而言,我不应该做什么。 r = requests.get("http://www.google.com/")正确地返回了一些东西。Facebook图使用python请求模块 - 证书验证失败的GET请求

回溯(最近通话最后一个): R = requests.get( “https://graph.facebook.com/cocacola”) 套路:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

谢谢!

回答

3

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

尝试调查这一要求可能会被检查证书的可能途径:

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

检查,看是否REQUESTS_CA_BUNDLE一个或CURL_CA_BUNDLE在您的环境:

env | egrep "REQUESTS_CA_BUNDLE|CURL_CA_BUNDLE" 

如果其中的一个设置,要求可能是验证证书时使用该配置。如果不是,则请求可能使用certifi。在这种情况下,也许这是值得更新它:

pip install -U certifi 

做不到这一点,尝试通过verify=Falserequests.get有它跳过验证步骤。我会建议解决真正的问题,而不是只关闭它,但这可能会帮助你达到它的底部。

+0

的验证=假的伎俩。我有certifi,egrep什么也没有。所以我不确定是否有真正的解决方法,但对于我的目的而言,没有任何验证工作正常。谢谢! – AJcodez 2012-01-27 19:27:46

2

你安装了certifi吗?最近也有类似的问题烧了我。由于GPL授权问题,Kenneth Reitz和co必须将SSL许可证捆绑到另一个回购。

我只是试着用以下的最多达最新certifi安装PyPI中,它似乎很好地工作:

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

有关许可困境的更多讨论,请在此Github Issue thread全速discolure:我是该线程的原始海报)。

如果一个新的certifi不能解决它,你可能想尝试Requests Github Issue page。他们是一个非常敏感和友善的社区!

编辑:如果达最新certifi不能解决问题,我强烈建议其他海报的建议,尝试verify=False

+0

感谢您的意见,但与certifi重新安装它仍然没有工作。 – AJcodez 2012-01-27 19:28:12

+0

我很抱歉听到!我怀疑如果您在[Github问题页面](https://github.com/kennethreitz/requests/issues)上提出问题,您会收到快速回复。 – mvanveen 2012-01-28 01:17:12