2012-11-10 8 views
9

Ich versuche, eine userless Anfrage an den Foursquare-API Mike Lewis' Python-Wrapper zu machen - https://github.com/mLewisLogic/foursquare:Python viereckig - SSL3 Zertifikat fehlgeschlagen verify

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

Intermittently, erhalte ich einen „Fehler beim Verbinden mit Foursquare API "msg. einen Logger läuft erzeugt eine ausführliche Mitteilung zu fangen:

„SSL-Routinen: SSL3_GET_SERVER_CERTIFICATE: Zertifikat fehlgeschlagen Verify“

verwenden passiert und tritt sowohl auf meiner lokalen Windows-Entwicklungsmaschine und auf einem Server ausgeführt Das ist nicht Ubuntu. Fehle ich etwas Grundlegendes über Sicherheitszertifikate? Das Problem ist intermittierend und manchmal wird nur eine Minute gewartet, und das Problem wird vorübergehend wiederholt.

Ich habe die neueste Version 20120716 des Wrappers heruntergeladen, obwohl im Code für init.py immer noch API_VERSION = '20120608' steht. Ich verwende Python 2.73 und habe mich auch für den Foursquare-API-Schlüssel angemeldet, indem ich die ID und das Geheimnis im obigen Code verwende. Ich habe die URLs mit meiner lokalen IP: 8000 aufgelistet und versucht, separate Schlüssel für die lokalen und dev Maschinen zu verwenden, aber das scheint keinen Unterschied zu machen.

Hilfe sehr geschätzt. Vielen Dank.

Antwort

23

Ich stieß gestern genau auf das gleiche Problem. Ich habe viel gesucht und viel probiert, und die folgende Strategie scheint für meinen Fall zu funktionieren (ich bin mir nicht 100% ig sicher, aber es meldet den Fehler nicht mehr).

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

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

2) zu Ihrer Python-Go httplib2 Richt. Meins ist bei /usr/local/lib/python2.7/dist-packages/httplib2

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

3) Sichern Sie die aktuelle Zertifikat

cp cacerts.txt backup_cacerts.txt 

4) Und dann die heruntergeladene Datei dort kopieren und benennen Sie es als cacerts.txt

mv cacert.pem cacerts.txt 

Das ist es.

Ich hoffe, es hilft. Wenn Sie nicht aus der Sicherungsdatei wiederherstellen und andere Methoden versuchen.

Meine viereckig Skripte arbeiten alle gleich nachdem ich das ändern:)

+0

Funktioniert wie ein Charme! Danke – user1814277

+1

Diese Lösung funktioniert auch für das Paket 'requests' durch Ersetzen der Datei site-packages/requests/cacert.pem. – ShinNoNoir

+1

Und funktioniert auch für Boto in 'site-packages/boto/cacerts/cacerts.txt' – ogrisel

0

die certifi Paket installieren oder aktualisieren:

pip install --upgrade certifi 

Dies ist die Lösung von urllib3 empfohlen wird (die von vielen Projekten verwendet wird, einschließlich requests , die wiederum von der oben verlinkten foursquare-Bibliothek und vielen anderen Bibliotheken verwendet wird): http://urllib3.readthedocs.io/en/latest/user-guide.html#certificate-verification

Wenn Sie dies für ein Pakete verwenden müssen Wenn Sie nicht urllib3, sondern beispielsweise httplib2 verwenden, kopieren Sie die Datei certifi/cacerts.pem in die Datei httplib2/cacerts.txt.Die Verzeichnisse kopieren von/zu können, indem Sie finden:

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__))' 

Wenn Sie nur urllib2 verwenden, dann wird das httplib2/ Verzeichnis nicht verwendet wird, sondern ein System Lage. Sie können überprüfen, die Dateien mit dem etwas wie folgt loooked:

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