2009-03-27 23 views
6

मैं ट्विटर ओएथ का उपयोग करने की कोशिश कर रहा हूं और POST अनुरोध 401 (Invalid OAuth Request) त्रुटि के साथ विफल रहे हैं।ट्विटर पर 401 प्राप्त करना OAuth POST अनुरोध

उदाहरण के लिए, अगर मैं एक नई स्थिति अद्यतन पोस्ट करना चाहते हैं, मैं एक HTTP POST अनुरोध https://twitter.com/statuses/update.json के लिए निम्न पैरामीटर के साथ भेज रहा हूँ -

status=Testing&oauth_version=1.0&oauth_token=xxx& 
oauth_nonce=xxx&oauth_timestamp=xxx&oauth_signature=xxx& 
oauth_consumer_key=xxx&in_reply_to=xxx&oauth_signature_method=HMAC-SHA1` 

मेरे GET अनुरोध सब ठीक काम कर रहे हैं। मैं मेलिंग सूचियों पर देख सकता हूं कि बहुत से लोगों में समान समस्याएं हैं लेकिन मुझे कहीं भी समाधान नहीं मिला।

मैं oauth.py पायथन पुस्तकालय का उपयोग कर रहा हूं।

+0

जब आप https के बजाय http के साथ प्रयास करते हैं तो यह काम करता है? बस – karlcow

+3

प्रश्न के बारे में सुनिश्चित करने के लिए मेरे पास एक ही समस्या थी और यह पता चला कि ट्विटर पर मेरे ऐप की कॉन्फ़िगरेशन का 'कॉलबैक यूआरएल' अनुभाग किसी भी तरह से खाली हो गया था। जब यह खाली होता है तो यह डेस्कटॉप मोड में जाता है और गतिशील कॉलबैक का उपयोग करने की क्षमता को अवरुद्ध करता है। जब तक आप खाली नहीं होते हैं, तब तक आप अपनी इच्छित सेटिंग में कोई प्लेसहोल्डर टेक्स्ट डाल सकते हैं। –

+0

@ जेफस्टैंडन धन्यवाद, मेरी ट्विटर लेख समस्या हल हो गई। बाद में –

उत्तर

-8

अधिकतर, हस्ताक्षर अमान्य है। हस्ताक्षर (सामान्यीकृत पैरामीटर, यूआरएलएनकोडिंग, और कोसमरसक्रेट & oauthScret उत्पन्न करने के तरीके पर आपको OAuth spec का पालन करना होगा। इस पर और अधिक ......

+18

? कब/कहाँ बाद में है? –

+0

6 साल ... कोई और जोड़ा नहीं ..... –

4

मैंने जावा का उपयोग करके स्क्रैच से ट्विटर ओएथ एपीआई को कार्यान्वित करना समाप्त कर दिया है। और पोस्ट अनुरोध ठीक काम करते हैं। आप हस्ताक्षर और HTTP शीर्षलेखों की जांच के लिए इस पृष्ठ http://www.hueniverse.com/hueniverse/2008/10/beginners-gui-1.html का उपयोग कर सकते हैं। बस अपनी चाबियाँ और टोकन दर्ज करें और आउटपुट जांचें। ऐसा लगता है कि इस पोस्ट पर वर्णित ट्विटर काम ठीक है। रिक्त स्थान और यूटीएफ -8 प्रतीकों से सावधान रहें, उदाहरण के लिए जावा "+" के रूप में अंतरिक्ष को एन्कोड करता है लेकिन ओएथ को% 20

2

मेरे पास एक ही समस्याएं थीं, जब तक मुझे एहसास नहीं हुआ कि पैरामीटर को बेस स्ट्रिंग के लिए दो बार एन्कोड किया जाना चाहिए। मेरे जीईटी अनुरोध सभी ठीक काम करते हैं, लेकिन मेरे पोस्ट , विशेष रूप से एसए टस अपडेट, असफल रहा। एक झुकाव पर मैंने status पैरामीटर में रिक्त स्थान के बिना एक पोस्ट की कोशिश की, और यह काम किया।

PHP में:

function encode($input) { 
    return str_replace('+', ' ', str_replace('%7E', '~', rawurlencode($input))); 
} 

$query = array(); 
foreach($parameters as $name => $value) { 
    $query[] = encode($name) . '=' .encode($value); 
} 
$base = encode(strtoupper($method)) . '&' .encode($norm_url) . '&' . 
encode(implode('&', $query)); 

सूचना के नाम और मापदंडों के मूल्यों के आसपास encode समारोह, और फिर पूरे क्वेरी स्ट्रिंग के आसपास। एक स्पेस %2520 के रूप में समाप्त होना चाहिए, न केवल %20

+0

शायद यह सिर्फ मेरे दिन को बचाया। मुझे एक ही समस्या है, केवल जावास्क्रिप्ट में। काम प्राप्त करें, पोस्ट इतना नहीं ... – selfawaresoup

3

सुनिश्चित करें कि आपका ऐप एक्सेस प्रकार & लिखें। अपने अनुप्रयोग सेटिंग पृष्ठ पर (पूर्व http://twitter.com/apps/edit/12345।) वहाँ इस तरह एक रेडियो बटन क्षेत्र है:

डिफ़ॉल्ट पहुंच प्रकार: पढ़ें & लिखें/केवल पढ़ने

यदि आप इसे 'केवल पढ़ने के लिए' तो स्थिति अद्यतन एपीआई 401.

0

मुझे समाधान मिला और यह मेरे लिए काम करता है, आपको अनुरोध शीर्षलेख में निम्नलिखित पैरामीटर जोड़ना होगा और इसे निम्नलिखित (सी # कोड) जैसा दिखना चाहिए, & साइन का उपयोग न करें, इसके बजाय अल्पविराम द्वारा अलग पैरामीटर (,) संकेत। और आपको शुरुआत में "ओथ" शब्द जोड़ना होगा।

httpWebRequest.Headers [System.Net.HttpRequestHeader.Authorization] = "OAuth oauth_consumer_key = \" hAnZFaPKxXnJqdfLhDikdw \ ", oauth_nonce = \" 4,729,687 \ ", oauth_signature_method = \" HMAC-SHA1 \ ", oauth_timestamp = \ "1284821 9 8 9 \", oauth_token = \ "17596307-KH9iUzqTxaoa5576VjILkERgUxcqExRyXkfb8AsXy \", oauth_version = \ "1.0 \", oauth_signature = \ "p8f5WTObefG1N9% 2b8AlBji1pg18A% 3d \" ";

और 'स्थिति' जैसे अन्य पैरामीटर अनुरोध के शरीर में लिखे जाने चाहिए।

3

मैं Jrgns द्वारा जवाब दूसरा दूसरा। मेरे पास बिल्कुल वही समस्या है। उदाहरण प्रदान करते समय ट्विटर प्रदान करता है, यह वास्तव में स्पष्ट है। हालांकि उनके छद्म कोड भ्रामक है। पायथन में यह मेरे लिए काम करता है:

def encodekeyval(key, val): 
    key = urllib.quote(key, '') 
    val = urllib.quote(val, '') 
    return urllib.quote(key + '=' + val, '') 

def signature_base_string(urlstr, oauthdata): 
    sigstr = 'POST&' + urllib.quote(urlstr,'') + '&' 
    # retrieve "post" data as dictionary of name value pairs 
    pdata = oauthdata.getpdata() 
    # need to sort parameters 
    pstr = '%26'.join([encodekeyval(key, pdata[key]) for key in sorted(pdata.keys())]) 
    return sigstr + pstr 
संबंधित मुद्दे