2012-11-10 19 views
9

मैं माइक लुईस 'अजगर आवरण का उपयोग कर Foursquare एपीआई के लिए एक userless अनुरोध करने के लिए कोशिश कर रहा हूँ में विफल रहा है सत्यापित करें - https://github.com/mLewisLogic/foursquare:अजगर Foursquare - SSL3 प्रमाण पत्र

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

रहकर, मैं एक "त्रुटि से कनेक्ट कर पाने फोरस्क्वेयर एपीआई "msg। एक लकड़हारा चल रहा है एक अधिक विस्तृत संदेश को पकड़ने के लिए पैदा करता है:

"एसएसएल दिनचर्या: SSL3_GET_SERVER_CERTIFICATE: प्रमाणपत्र सत्यापित विफल"

यह तो होना ही उपयोग नहीं किया और मेरे स्थानीय Windows विकास मशीन पर और एक सर्वर चल रहा है पर दोनों होता है ubuntu। क्या मुझे सुरक्षा प्रमाणपत्रों के बारे में कुछ बुनियादी बात याद आ रही है? समस्या अस्थायी है और कभी-कभी इसे सिर्फ एक मिनट छोड़कर पुनः प्रयास करने से समस्या अस्थायी रूप से ठीक हो जाती है।

मैंने रैपर का नवीनतम 20120716 संस्करण डाउनलोड किया है हालांकि init.py के कोड में यह अभी भी API_VERSION = '20120608' कहता है। मैं पाइथन 2.73 का उपयोग कर रहा हूं और उपरोक्त कोड में आईडी और गुप्त का उपयोग करके फोरस्क्वेयर एपीआई कुंजी के लिए भी साइन अप किया है। मैंने अपने स्थानीय आईपी: 8000 का उपयोग करके यूआरएल सूचीबद्ध किया और स्थानीय और देव मशीनों के लिए अलग-अलग कुंजियों का उपयोग करने की कोशिश की लेकिन ऐसा कोई फर्क नहीं पड़ता।

बहुत सराहना की सहायता करें। धन्यवाद।

उत्तर

23

मुझे कल एक ही समस्या का सामना करना पड़ा। मैंने बहुत कुछ खोजा और बहुत कोशिश की, और लगता है कि मेरे मामले के लिए निम्नलिखित रणनीति काम करती है (मुझे 100% यकीन नहीं है लेकिन यह अब त्रुटि की रिपोर्ट नहीं कर रहा है)।

1) डाउनलोड http://curl.haxx.se/ca/cacert.pem

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

2) अपने अजगर 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 स्क्रिप्ट ठीक से काम करने के बाद मैं इस बदलें:)

+0

एक आकर्षण की तरह काम करता है! धन्यवाद – user1814277

+1

यह समाधान साइट-पैकेज/अनुरोध/cacert.pem फ़ाइल को प्रतिस्थापित करके 'अनुरोध' पैकेज के लिए भी काम करता है। – ShinNoNoir

+1

और 'साइट-पैकेज/बोटो/कैकर्ट/cacerts.txt' – ogrisel

0

स्थापित करें या certifi पैकेज का उन्नयन:

pip install --upgrade certifi 

यह समाधान urllib3 द्वारा सिफारिश की (जो requests सहित कई परियोजनाओं द्वारा इस्तेमाल किया जाता है , जो बदले में चार अन्य पुस्तकालयों से जुड़ी चौकोर लाइब्रेरी द्वारा उपयोग किया जाता है): 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'