2012-11-10 9 views
9

を確認に失敗しました私はマイク・ルイスのPythonラッパーを使用して、FoursquareのAPIにuserlessリクエストを作るためにしようとしている - https://github.com/mLewisLogic/foursquarePythonのフォースクエア - SSL3証明書が

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

断続的に、私はへの接続」エラーを取得フォースクエアAPI "msg。詳細なメッセージをキャッチするロガーを実行すると、生成します。

はこれが起こることを使用していなかった

を「SSLルーチン:SSL3_GET_SERVER_CERTIFICATE証明書が失敗した確認」と私のローカルのWindows開発マシン上で、サーバーの稼働の両方が発生しますubuntu。ここでセキュリティ証明書について何か基本的なものがありませんか?問題は断続的で、時にはただちにそれを残し、再試行すると問題が一時的に修正されます。

最新の20120716バージョンのラッパーをダウンロードしましたが、init.pyのコードではまだAPI_VERSION = '20120608'と表示されています。私はPython 2.73を使用しており、上記のコードでIDと秘密を使用してFoursquare APIキーにサインアップしています。私は私のローカルIP:8000を使ってURLを列挙し、ローカルとdevマシンのために別々のキーを使ってみましたが、これは違いがないようです。

大変助けになりました。ありがとう。

答えて

23

昨日全く同じ問題が発生しました。私はたくさんの検索を行い、多くのことを試みましたが、私のケースでは以下のような戦略が働いているように見えます(私は100%確信していませんが、

1)あなたのPython httplib2ディレクトリに移動します)http://curl.haxx.se/ca/cacert.pem

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

2をダウンロードしてください。鉱山は戻る現在の証明書

cp cacerts.txt backup_cacerts.txt 

4)そして、そこにダウンロードしたファイルをコピーしていcacerts.txt

mv cacert.pem cacerts.txt 

として名前を変更し、最大 /usr/local/lib/python2.7/dist-packages/httplib2

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

3)です。

希望します。バックアップファイルから回復しない場合は、他の方法を試してください。

私はこれを変更した後、私のフォースクエアのスクリプトは、すべての権利を動作します。)

+0

魅力的な作品です! Thanks – user1814277

+1

この解決策は、 'requests'パッケージでもsite-packages/requests/cacert.pemファイルを置き換えて動作します。 – ShinNoNoir

+1

また 'site-packages/boto/cacerts/cacerts.txt'のbotoにも対応しています – ogrisel

0

certifiパッケージをインストールまたはアップグレード:

pip install --upgrade certifi 

これはrequestsを含む多くのプロジェクトで使用されてurllib3(が推奨するソリューションです上にリンクされている四角形のライブラリと他の多くの図書館で使用されています)。http://urllib3.readthedocs.io/en/latest/user-guide.html#certificate-verification

パッケージurllib3は使用しませんがhttplib2を使用する場合は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/ディレクトリが使用されていませんが、システムの場所:ディレクトリが実行して見つけることができるために/からコピーします。あなたはloookedされているファイルを次のように確認できます:

strace python -c "import urllib2; urllib2.urlopen(urllib2.Request('https://google.com/'))" 2>&1 | grep 'open' | grep 'cert'