2012-06-11 114 views
0

我想給這樣的如何發送自定義獲取HTTP請求使用C#?

GET /v1/contacts?sid=msgrsessionid 
Authorization: OAuth 
realm="yahooapis.com", 
oauth_consumer_key="dj0yJmk9nM9Y29uc3VtZXJzZWNyZXQmeD1lMg--", 
oauth_nonce="24829.2331", 
oauth_signature_method="PLAINTEXT", 
oauth_timestamp="1219450170", 
oauth_token="A%3DuqkiebGpiTJl7ThQxU.jDXXaETYyfEy3xAKPyoavokwOOcZcz8Xs_l1Nvnl._KmCEVCeLkxxT1Y6BgRqf5f98sQWHklBM_anetveR7okK_M_5XEmQ1_1reo3UgKQULT_dQT8Gao3rgz5rJxgmnYrhdWWdfgTdMQVzpbJT2aGkz59NTK1O8yXVE1EvZUCqju7WiFYu.WHNEw.9TWq3g--", 
oauth_version="1.0", 
oauth_signature="O2AQipLITO0aYHKZc9266RzC94%260af0ef7f79bfb89dd6af87589e4c97b022f594a3" 

我使用下面的代碼的請求,但我得到的未經授權的訪問(401)異常,這裏有什麼問題?如何發送上述原料請求作爲字符串(就像我們用telnet所做的那樣)不是構建爲WebRequest。

Uri address = new Uri("https://api.login.yahoo.com/oauth/v2/get_token"); 
WebRequest request = WebRequest.Create(address); 
request.Method = "GET"; 
request.ContentType = "application/x-www-form-urlencoded"; 
StringBuilder authHeader = new StringBuilder(); 
authHeader.Append("Authorization: OAuth "); 
authHeader.Append("realm=\"yahooapis.com\", "); 
authHeader.Append("oauth_consumer_key=\""+consumerKey+"\", "); 
authHeader.Append("oauth_nonce=\""+random+"\", "); 
authHeader.Append("oauth_signature_method=\"PLAINTEXT\", "); 
authHeader.Append("oauth_timestamp=\""+UnixTimeNow().ToString()+"\", "); 
authHeader.Append("oauth_token=\""+requestToken.Trim()+"\", "); 
authHeader.Append("oauth_version=\"1.0\", ");    
authHeader.Append("oauth_signature=\""+HttpUtility.UrlEncode(consumerKey+"&"+consumersecret)+"\""); 

request.Headers.Add(authHeader.ToString()); 
+0

你原始的'WebRequest'請求是什麼樣的? (您可以在[Fiddler2](http://www.fiddler2.com/fiddler2/))中查看原始頭文件) – jrummell

+1

是否有您未使用[OAuth庫]的原因(http://stackoverflow.com/questions/3997172/oauth-2-0-service-provider-net-libraries)發出請求而不是試圖將它放在一起? – 48klocs

+0

我只需要爲我的項目的其餘部分得到這個竅門,我想使用雅虎apis,如果我沒有得到這個,我不能做其餘的 – armin

回答

0

如果你想,讓你在你發送過線,you can roll your sleeves up a bit further and work with TcpClient instead數據更多的控制的API。

這就是說,這不是我推薦的 - 正如我在上面的評論中提到的,there are .Net OAuth libraries out there。我用OAuth的經驗最多隻能通過(但足以說明一些信心「如果你解決了這個問題,你會碰到另一個又一個」),但除非你的產品本身是OAuth庫,否則我沒有想法爲什麼你不會使用別人的。