2012-11-23 44 views
0

好的代码如下。Oauth没有授权阅读请求

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Security.Cryptography; 
using System.Net; 
using System.IO; 

namespace twitter_integration_v1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var oauth_token = "somekey"; 
     var oauth_token_secret = "somekey"; 
     var oauth_consumer_key = "somekey"; 
     var oauth_consumer_secret = "somekey"; 

     var oauth_version = "1.0"; 
     var oauth_signature_method = "HMAC-SHA1"; 
     var oauth_nonce = Convert.ToBase64String(
     new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); 
     var timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, 
     DateTimeKind.Utc); 
     var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString(); 
     var resource_url = "http://api.twitter.com/1/statuses/update.xml"; 
     //var resource_url = "http://api.twitter.com/1/statuses/home_timeline.xml"; 
     var status = "Another Status Update 3"; 

     var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + 
      "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&status={6}"; 

     var baseString = string.Format(baseFormat, 
            oauth_consumer_key, 
            oauth_nonce, 
            oauth_signature_method, 
            oauth_timestamp, 
            oauth_token, 
            oauth_version, 
            Uri.EscapeDataString(status) 
            ); 

     baseString = string.Concat("POST&", Uri.EscapeDataString(resource_url), 
        "&", Uri.EscapeDataString(baseString)); 

     var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret), 
        "&", Uri.EscapeDataString(oauth_token_secret)); 

     string oauth_signature; 
     using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))) 
     { 
      oauth_signature = Convert.ToBase64String(
       hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString))); 
     } 

     var headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " + 
       "oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " + 
       "oauth_token=\"{4}\", oauth_signature=\"{5}\", " + 
       "oauth_version=\"{6}\""; 

     var authHeader = string.Format(headerFormat, 
           Uri.EscapeDataString(oauth_nonce), 
           Uri.EscapeDataString(oauth_signature_method), 
           Uri.EscapeDataString(oauth_timestamp), 
           Uri.EscapeDataString(oauth_consumer_key), 
           Uri.EscapeDataString(oauth_token), 
           Uri.EscapeDataString(oauth_signature), 
           Uri.EscapeDataString(oauth_version) 
         ); 

     // Requesting now 

     var postBody = "status=" + Uri.EscapeDataString(status); 

     ServicePointManager.Expect100Continue = false; 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); 
     request.Headers.Add("Authorization", authHeader); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     using (Stream stream = request.GetRequestStream()) 
     { 
      byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody); 
      stream.Write(content, 0, content.Length); 
     } 
     WebResponse response = request.GetResponse(); 

     Console.WriteLine("Now attempting to display homepage"); 

    } 
} 
} 

好吧,现在的事情是,上面的代码工作正常,通过POST编写状态更新。但是每当我试图用它的varaiation像

Console.WriteLine("Attempting to read"); 

     //var postBody = "status=" + Uri.EscapeDataString(status); 

     ServicePointManager.Expect100Continue = false; 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); 
     request.Headers.Add("Authorization", authHeader); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     /*using (Stream stream = request.GetRequestStream()) 
     { 
      byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody); 
      stream.Write(content, 0, content.Length); 
     }*/ 

     WebResponse response = request.GetResponse(); 

接收状态更新它的代码只是在崩溃和WebResponse response = request.GetResponse();在401擅自发送。如何授权书写而不是阅读。任何关于从哪里开始的帮助将不胜感激。

回答

0

你需要做这样的事情,那就是你有

WebResponse response = request.GetResponse(); 

做这样的事情

var response = (HttpWebResponse)page.GetResponse(); 
+0

我已经解决了,似乎我忘了替换“POST”与“阅读问题GET'在request.method属性中。无论如何非常感谢您阅读这样一个长的代码。 –