2011-09-23 14 views
6

का उपयोग कर टंबलर पर पोस्टिंग मैं v2 एपीआई का उपयोग कर टंबलर के साथ बातचीत करने के लिए एक सरल अनुप्रयोग विकसित करने की कोशिश कर रहा हूं। मैं oAuth प्रवाह (ट्विटर पर पाए गए दस्तावेज के लिए धन्यवाद) में हर कदम को पार करने में सक्षम हूं और एक अधिकृत और प्रमाणित टोकन और गुप्त प्राप्त करता हूं। लेकिन जब पोस्ट करने की बात आती है, तो मुझे 401 अनधिकृत त्रुटि मिलती है। यह प्रासंगिक कोड स्निपेट है:ओथ और सी #

private void post_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     url = new Uri("http://api.tumblr.com/v2/blog/*myblog*.tumblr.com/post"); 

     Random random = new Random(); 
     nonce = random.Next(1234000, 9999999).ToString(); 

     TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); 
     timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); 

     string method = "POST"; 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat("{0}&", method); 
     sb.AppendFormat("{0}&", upperCaseUrl(HttpUtility.UrlEncode(url.ToString()))); 
     sb.AppendFormat("body%3D{0}%26", upperCaseUrl(HttpUtility.UrlEncode(textBox.Text))); 
     sb.AppendFormat("oauth_consumer_key%3D{0}%26", consumerKey); 
     sb.AppendFormat("oauth_nonce%3D{0}%26", nonce); 
     sb.AppendFormat("oauth_signature_method%3D{0}%26", "HMAC-SHA1"); 
     sb.AppendFormat("oauth_timestamp%3D{0}%26", timestamp); 
     sb.AppendFormat("oauth_token%3D{0}%26", token); 
     sb.AppendFormat("oauth_version%3D{0}%26", "1.0"); 
     sb.AppendFormat("type%3D{0}", "text"); 

     System.Diagnostics.Debug.WriteLine(sb.ToString()); 

     string signingKey = consumerSecret + '&' + secret; 

     HMACSHA1 signing = new HMACSHA1(Encoding.ASCII.GetBytes(signingKey)); 
     byte[] bytearray = Encoding.ASCII.GetBytes(sb.ToString()); 
     MemoryStream stream = new MemoryStream(bytearray); 
     signature = Convert.ToBase64String(signing.ComputeHash(stream)); 

     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

     StringBuilder header = new StringBuilder(); 
     header.Append("OAuth "); 
     header.AppendFormat("oauth_consumer_key=\"{0}\", ", consumerKey); 
     header.AppendFormat("oauth_token=\"{0}\", ", token); 
     header.AppendFormat("oauth_nonce=\"{0}\", ", nonce); 
     header.AppendFormat("oauth_timestamp=\"{0}\", ", timestamp); 
     header.AppendFormat("oauth_signature_method=\"{0}\", ", "HMAC-SHA1"); 
     header.AppendFormat("oauth_version=\"{0}\", ", "1.0"); 
     header.AppendFormat("oauth_signature=\"{0}\"", upperCaseUrl(HttpUtility.UrlEncode(signature))); 

     System.Diagnostics.Debug.WriteLine(header.ToString()); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

     request.Method = WebRequestMethods.Http.Post; 

     request.Headers.Add("Authorization", header.ToString()); 

     try 
     { 
      HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 

      if (reader.ReadToEnd() == "201: Created") 
      { 
       control.Invoke((MethodInvoker)delegate 
       { 
        statusText.Text = "Post successfully sent!"; 
       }); 
      } 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex.Message); 
     } 
    } 

फ़ंक्शन को बटन पर क्लिक करने और टेक्स्ट टेक्स्ट से बॉडी टेक्स्ट प्राप्त करने के लिए बुलाया जाता है। हस्ताक्षर भाग सही है क्योंकि इसका परीक्षण अन्य सेवाओं (ट्विटर इत्यादि) के साथ किया गया है और यह अभी भी टंबलर के लिए मान्य हस्ताक्षर प्रदान करता है। प्रमाणीकरण हेडर काफी समान है जिसे मैंने टोकन का अनुरोध करने और इसे अधिकृत करने के लिए उपयोग किया है, और बेस स्ट्रिंग में केवल oauth_ * मानक पैरामीटर के अलावा सामग्री का प्रकार (इस मामले में टेक्स्ट) और शरीर शामिल है। मैंने hueniverse.com पर उपलब्ध टूल्स के साथ कोड भी चेक किया, लेकिन अभी भी कुछ भी नहीं।

शायद मुझे कुछ HTTP शीर्षलेख याद आ रहा है या मैं गलत अनुरोध पोस्ट कर रहा हूं। कोई विचार? धन्यवाद।

+4

आप इसे कैसे ठीक किया पर कोई अद्यतन? मुझे एक समान समस्या मिली है। Tumblr से 401 वापस प्राप्त रखें, लेकिन यकीन नहीं क्यों। –

+0

एक ही समस्या है ... क्या आप इसे ठीक करने में कामयाब रहे हैं (और कैसे)? – SimpleVar

उत्तर

0

GitHub है कि आप मदद कर सकते हैं पर एक पूर्ण उदाहरण है ...

https://github.com/jthigpen/TumblrAPI.NET

+5

इससे मदद नहीं मिलती क्योंकि यह प्राधिकरण के लिए उपयोगकर्ता नाम/पासवर्ड का उपयोग करता है, ओएथ नहीं। –

+0

मुझे यह [लिंक] मिला है (https://www.codeproject.com/Tips/578418/Integrate-Tumblr-into-Csharp-NET-Website) सहायक। इसमें एक 'हेल्पर' कक्षा होती है जहां आप आसानी से ओथ 1.0 ए को निष्पादित कर सकते हैं और आप उपयोगकर्ता जानकारी के लिए tumblr को GET और POST अनुरोध भी कर सकते हैं। उम्मीद है कि यह किसी की मदद करता है –

संबंधित मुद्दे