2012-09-27 15 views
6

के साथ ओथ अनुरोध कैसे भेजें I outh के साथ प्रमाणीकृत अनुरोध कैसे भेजना है, यह जानने के लिए दीवार के खिलाफ मेरा सिर तेज़ कर रहा है।python-oauth2

मैं टोकन तक पहुंचने में सक्षम था, लेकिन पूरी तरह से यह सुनिश्चित नहीं था कि उनके साथ अनुरोध कैसे सबमिट किया जाए। मैं चहचहाना के डेवलपर की सूचना के आधार पर यह पाया:

https://dev.twitter.com/docs/auth/oauth/single-user-with-examples#python जो एक अधिकृत अनुरोध भेजने के लिए कुछ उदाहरण कोड है:

:,

def oauth_req(url, key, secret, http_method="GET", post_body=None,http_headers=None): 
    consumer = oauth.Consumer(key=consumerKey, secret=consumerSecret) 
    token = oauth.Token(key=tokenKey, secret=tokenSecret) 
    client = oauth.Client(consumer, token) 
    resp, content = client.request(
     url, 
     method=http_method, 
     body=post_body, 
     headers=http_headers, 
     #force_auth_header=True                                     
     ) 
    return resp,content 

oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 

हालांकि जब मैं अपने जानकारी के सभी शामिल है, मैं निम्न त्रुटि प्राप्त

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/tmp/python-22060Umg.py", line 153, in <module> 
    transactions = oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 
    File "/tmp/python-22060Umg.py", line 76, in oauth_req 
    force_auth_header=True 
TypeError: request() got an unexpected keyword argument 'force_auth_header' 

जहां: उपयोगकर्ता वास्तविक उपयोगकर्ता है (मैंने इसे पोस्ट से हटा दिया है) और टोकनकी/टोकनसेक्रेट एक्सेस टोकन हैं।

मैं शायद सोचा था कि यह हमलावर लाइन बाहर टिप्पणी के रूप में सरल था, लेकिन ऐसी कोई भाग्य:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/tmp/python-22060hwm.py", line 153, in <module> 
    transactions = oauth_req('http://openapi.etsy.com/v2/shops/:user/transactions',tokenKey,tokenSecret) 
    File "/tmp/python-22060hwm.py", line 75, in oauth_req 
    headers=http_headers 
    File "/usr/lib/python2.7/dist-packages/oauth2/__init__.py", line 662, in request 
    req.sign_request(self.method, self.consumer, self.token) 
    File "/usr/lib/python2.7/dist-packages/oauth2/__init__.py", line 493, in sign_request 
    self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest()) 
TypeError: must be string or buffer, not None 

तो अब, stackoverflow, तुम मेरे ही उम्मीद कर रहे हैं! अनुरोध सबमिट करने के लिए मेरे एक्सेस टोकन का उपयोग करने के लिए किसी के पास सुझाव हैं?

धन्यवाद!

+0

क्या आप अपना कोड पोस्ट कर सकते हैं? इसके बिना मदद करने के लिए वास्तव में संभव नहीं है – jterrace

+0

कोड मूल पोस्ट में लिंक के समान है। मैंने मूल पोस्ट को कोड रखने के लिए संपादित किया है; धन्यवाद! –

उत्तर

10

ट्विटर का दस्तावेज पुराना है - oauth2 का संस्करण वे 3-वर्षीय कांटा से लिंक करते हैं। कोई भी कीवर्ड तर्क force_auth_header अब के लिए oauth2.Client.request

कारण है कि आप अभी भी अपमानजनक लाइन को हटाने के बाद भी त्रुटियों मिल रहा है क्योंकि post_body के लिए अपने डिफ़ॉल्ट मूल्य None जो सीधे oauth2.Client.request के माध्यम से पारित हो जाता है है। आप अभ्यास में ऐसा करने में सक्षम नहीं होंगे। आपको या तो उस तर्क की आवश्यकता होगी, एक डिफ़ॉल्ट मान चुनें जो काम करता है (जैसे खाली स्ट्रिंग), या इस त्रुटि को रोकने के लिए इसे पार करने से पहले जांचें।

4

बस Rafe की टिप्पणी पर विस्तार करने के लिए ...

अजगर में oAuth पुस्तकालयों के थोक अविश्वसनीय रूप से टूटी हुई, पुराना हो चुका है और अब बनाए रखा है। उनमें से अधिकतर अपने स्वयं के परीक्षण भी पास नहीं करते हैं, प्रारूप विनिर्देश अकेले छोड़ दें। ट्विटर को उस सामान का संदर्भ नहीं देना चाहिए, लेकिन वे करते हैं। , http://pypi.python.org/pypi/requests-oauth - - https://github.com/ryanmcgrath/twython - -

Twython एक अजगर चहचहाना ग्राहक है कि लपेटता oAuth है यह requests और requests-oauth संकुल के माध्यम से OAuth1 कल्पना लपेटता लेकिन ट्विटर के एपीआई कि स्वीकार करता है।

ओएथ 2 के संदर्भ में, इस लाइब्रेरी में कुछ कार्यान्वित कार्य इसे लागू करने की कोशिश कर रहा है (अंतिम 2 महीने पहले प्रतिबद्ध) - https://github.com/idan/oauthlib। मैंने इसे खुद की कोशिश नहीं की है, और कल इसके बारे में पता चला है।

जल्दी जोड़ने के लिए - भले ही आप etsy का उपयोग कर रहे हों, फिर भी यदि आप oauth1 का समर्थन कर रहे हैं तो आपको etsy एंडपॉइंट्स का उपयोग करने के लिए अभियंता twython को रिवर्स करने में सक्षम होना चाहिए।

+0

यदि आपको OAuth 1.0/a और 2.0 के लिए एक व्यापक, बनाए रखा क्लाइंट लाइब्रेरी की आवश्यकता है तो आप [rauth] (https://github.com/litl/rauth) को आजमा सकते हैं। – maxcountryman