我正在尝试使用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并尝试使用本地和开发机器的单独密钥,但这似乎没有区别。
非常感谢。感谢。
答案 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/