2010-09-02 26 views
5

Piszę aplikację internetową, aby autopostować w Google buzz.gdata nieznany nagłówek autoryzacji

Napisałem bibliotekę C# do zarządzania z "Oauth dance" i działa dobrze, mogę uzyskać oauth_token i oauth_token_secret.

Użyłem www.googlecodesamples.com/oauth_playground/ do sprawdzenia poprawności mojego oauth_token i oauth_token_secret i działa dobrze. Przetestowałem to z GET i https://www.googleapis.com/buzz/v1/activities/@me/@self , aby pobrać strumień użytkownika, to działa.

ale teraz

staram się robić to samo za pomocą mojego C# biblioteki, ale pojawia się zawsze ten błąd:

<?xml version="1.0" encoding="UTF-8"?> 
<errors xmlns="http://schemas.google.com/g/2005"> 
    <error> 
     <domain>GData</domain> 
     <code>invalid</code> 
     <location type="header">Authorization</location> 
     <internalReason>Unknown authorization header</internalReason> 
    </error> 
</errors> 

Mój wniosek jest taki sam nagłówek w jednej z zabaw.

Accept: */* 
Content-Type: application/atom+xml 
Authorization: OAuth oauth_version="1.0", oauth_nonce="9216320", 
oauth_timestamp="1283430867", oauth_consumer_key="www.mysite.com", 
oauth_token="1%2FZodlNmPP96GT11vYaWA0y6QoqKLqNqZ8bNmxknZZZc", 
oauth_signature_method="HMAC-SHA1", 
oauth_signature="Tuu82feKNWa4CxoDUyvtIEVODRA%3D" 
GData-Version: 2.0 

Oto kod C#:

string headAuth = "Authorization: OAuth oauth_version=\"1.0\", oauth_nonce=\"9216320\", oauth_timestamp=\"1283430867\", 
oauth_consumer_key=\"www.mysite.com\", oauth_token= 
\"1%2FZodlNmPP96GT11vYaWA0y6QoqKLqNqZ8bNmxknZZZc\", 
oauth_signature_method=\"HMAC-SHA1\", oauth_signature= 
\"Tuu82feKNWa4CxoDUyvtIEVODRA%3D\""; 

HttpWebRequest req1 =(HttpWebRequest)HttpWebRequest.Create("https://www.googleapis.com/buzz/v1/activities/@me/@self"); 
req1.Method = "GET"; 
req1.Accept = "*/*"; 
req1.ContentType = "application/atom+xml"; 
req1.Headers.Add("Authorization", headAuth); 
req1.Headers.Add("GData-Version", "2.0"); 

try 
{ 
    HttpWebResponse response1 =(HttpWebResponse)req1.GetResponse(); 
    using (var sr = new StreamReader(response1.GetResponseStream())) 
    { 
     string test_1 = sr.ReadToEnd(); 
    } 
} 
catch (WebException e) 
{ 
    Stream objStream = e.Response.GetResponseStream(); 
    StreamReader objStreamReader = new StreamReader(objStream); 
    string err = objStreamReader.ReadToEnd(); 
} 

Dlaczego tymi samymi danymi, to działa dobrze na placu zabaw i nie działa w kod C#? Każdy pomysł, jak to naprawić?

Dzięki Stefano

+1

Rozwiązałeś problem? Mam do czynienia z tym samym problemem z interfejsem API do obsługi administracyjnej. – JochenJung

Odpowiedz

0

Wygląda dodawania autoryzacji OAuth w nagłówku dwa razy.

W ciągu nagłówka masz string headAuth = "Authorization: OAuth, a po dodaniu nagłówka do req1.Headers.Add("Authorization", headAuth); dodajesz go ponownie.

Powiązane problemy