9

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 を実行しているサーバーの両方で発生しました。ここでセキュリティ証明書に関する基本的なことが欠けていますか? この問題は断続的に発生し、1 分ほど放置して再試行するだけで一時的に問題が解決する場合があります。

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

大変助かりました。ありがとう。

4

2 に答える 2

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

それでおしまい。

それが役に立てば幸い。バックアップ ファイルから回復しない場合は、他の方法を試してください。

これを変更した後、私のフォースクエアスクリプトは問題なく動作します:)

于 2012-11-11T15:48:35.517 に答える
0

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

pip install --upgrade certifi

これは、 http : urllib3//urllib3.readthedocs.io/en/latest/user-guide . html#証明書の検証requests

たとえば、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/ディレクトリは使用されず、システムの場所が使用されます。次のような方法で、ルックアップされているファイルを確認できます。

strace python -c "import urllib2; urllib2.urlopen(urllib2.Request('https://google.com/'))" 2>&1 | grep 'open' | grep 'cert'
于 2016-08-21T11:53:43.813 に答える