python foursquare - SSL3证书验证失败

时间:2012-11-10 10:39:22

标签: python ssl ssl-certificate foursquare

我正在尝试使用Mike Lewis的Python包装器 - https://github.com/mLewisLogic/foursquare向Foursquare API发出无用户请求:

client = foursquare.Foursquare(client_id=Client_ID, client_secret=Client_Secret)
categs = client.venues.categories()

间歇,我收到“连接到Foursquare API时出错”消息。运行记录器以捕获更详细的消息会产生:

“SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”

这在我的本地Windows开发机器和运行ubuntu的服务器上都没有发生。我是否遗漏了一些关于安全证书的基本内容?这个问题是间歇性的,有时只需要花一分钟时间,然后重试就会暂时解决问题。

我已经下载了最新的20120716版本的包装器,尽管在init.py的代码中它仍然说API_VERSION ='20120608'。我正在使用Python 2.73并且还使用上面代码中的id和secret注册了Foursquare API密钥。我列出了网址,使用我的本地IP:8000并尝试使用本地和开发机器的单独密钥,但这似乎没有区别。

非常感谢。感谢。

2 个答案:

答案 0 :(得分:23)

我昨天遇到了完全相同的问题。我搜索了很多并尝试了很多,似乎以下策略适用于我的情况(我不是100%确定,但它不再报告错误)。

1)下载http://curl.haxx.se/ca/cacert.pem

wget http://curl.haxx.se/ca/cacert.pem

2)转到你的Python httplib2目录。我在 /usr/local/lib/python2.7/dist-packages/httplib2

cd /usr/local/lib/python2.7/dist-packages/httplib2

3)备份当前证书

cp cacerts.txt backup_cacerts.txt

4)然后将下载的文件复制到那里并将其重命名为cacerts.txt

mv cacert.pem cacerts.txt

就是这样。

希望它有所帮助。如果没有从备份文件中恢复并尝试其他方法。

我更改后,我的foursquare脚本可以正常运行:)

答案 1 :(得分:0)

安装或升级<%= link_to "Neederlands", home_path(:locale => 'nl') %> | <%= link_to "Français", home_path(:locale => 'fr') %> 包:

certifi

这是pip install --upgrade certifi 推荐的解决方案(包括urllib3在内的许多项目都使用了这个解决方案,而这些项目又由上面链接的foursquare库和许多其他库使用):http://urllib3.readthedocs.io/en/latest/user-guide.html#certificate-verification

如果您需要将此用于不使用urllib3的软件包,而是使用httplib2,则将requests文件复制到certifi/cacerts.pem。可以通过执行以下操作找到要复制的目录:

httplib2/cacerts.txt

如果您只是使用python -c 'import httplib2; import os.path; print(os.path.dirname(httplib2.__file__))' python -c 'import certifi; import os.path; print(os.path.dirname(certifi.__file__))' ,则不使用urllib2目录,而是使用系统位置。您可以使用以下内容检查正在下载的文件:

httplib2/