我使用下面的代碼嘗試獲取oauth_token和oauth_secret。request_oauth使用微博(C#)
string url = "https://api.twitter.com/oauth/request_token";
string base_format = "oauth_callback={0}&oauth_consumer_key={1}&oauth_nonce={2}&oauth_signature_method={3}&oauth_timestamp={4}&oauth_version={5}";
string base_string = String.Format(base_format, oauth_callback, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_version);
base_string = String.Concat("POST&", Uri.EscapeDataString(url), Uri.EscapeDataString(base_string));
var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret),
"&");
string oauth_signature;
using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey)))
{
oauth_signature = Convert.ToBase64String(
hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(base_string)));
}
string header_format = "OAuth oauth_nonce=\"{0}\", oauth_callback=\"{1}\", oauth_signature_method=\"{2}\", oauth_timestamp=\"{3}\", oauth_consumer_key=\"{4}\", oauth_signature=\"{5}\", oauth_version=\"{6}\"";
string header = string.Format(header_format, Uri.EscapeDataString(oauth_nonce), Uri.EscapeDataString(oauth_callback), Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(oauth_timestamp), Uri.EscapeDataString(oauth_consumer_key), Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version));
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Headers.Add("Authorization", header);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
WebResponse response = req.GetResponse();
和它返回給我一個401.我沒有看到這裏有什麼錯。需要幫助。
你沒有請求籤名。您需要加密您發送的信息並將其作爲簽名加入。這段代碼對於你想要完成的事情來說很簡單。以這種方式手工操作會讓你的生活變得很頭疼,儘管有時需要自己寫。你可以在這裏找到更多關於簽名的信息http://oauth.net/core/1.0/#signing_process – Tony
謝謝你,我成功了。代碼有幾個格式問題。 –