2016-07-25 7 views
0

Ich versuche, eine Anmeldung POST Anfrage mit JSON zu dieser Website Link, und folgen Sie der Umleitung.Mein aktuelles Programm funktioniert gut, wenn die Anmeldedaten falsch sind.Wenn die Details falsch sind, bekomme ich die (401) nicht autorisiert. Nachricht, was bedeutet, dass die Post-Anfrage erfolgreich war. Allerdings ist mein Problem, dass, wenn die Login-Daten korrekt sind, bekomme ich die '(400) Bad Request'. Ich habe keine Ahnung, warum das passiert und ich bin derzeit an diesem Punkt fest. Hier ist mein Code, und ich hoffe, jemand kann mir helfen:C# Json Post Anfrage mit Umleitung

static string url = "https://auth.riotgames.com/authz/auth"; 
     static string uriString = ""; 
     static void Main(string[] args) 
     { 
      var request_check = (HttpWebRequest)HttpWebRequest.Create("https://auth.riotgames.com/authz/auth"); 
      request_check.Host = "auth.riotgames.com"; 
      request_check.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"; 
      request_check.Accept = "application/json, text/javascript, */*; q=0.01"; 
      request_check.Headers.Add("Accept-Language", "en-US,en;q=0.5"); 
      request_check.Headers.Add("Accept-Encoding", "gzip, deflate, br"); 
      request_check.ContentType = "application/json"; 
      request_check.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
      request_check.Referer = "https://auth.riotgames.com/authorize?response_type=code&scope=openid%20email&client_id=merch-store-client&ui_locales=de-DE&login_hint=euw&redirect_uri=https://euw.merch.riotgames.com/de/riot_sso/auth/redirect/"; 
      var cookieContainer = new CookieContainer(); 
      request_check.CookieContainer = cookieContainer; 
      request_check.Method = "POST"; 
      request_check.KeepAlive = true; 
      request_check.AllowAutoRedirect = false; 
      // Account details Senturia:a12365478 
      using (var streamWriter = new StreamWriter(request_check.GetRequestStream())) 
      { 
       string json = "{\"username\":\"Senturia\",\"password\":\"a12365478\",\"remember\":false,\"region\":\"EUW1\",\"language\":\"de_DE\",\"lang\":\"de_DE\"}"; 
       streamWriter.Write(json); 
      } 
      try 
      { 
       // Get the response ... 
       using (var webResponse = (HttpWebResponse)request_check.GetResponse()) 
       { 
        // Now look to see if it's a redirect 
        if ((int)webResponse.StatusCode >= 300 && (int)webResponse.StatusCode <= 399) 
        { 
         uriString = webResponse.Headers["Location"]; 
         Console.WriteLine("Redirect to " + uriString ?? "NULL"); 
        } 
       } 
      } 
      catch(Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 



      Console.ReadKey(); 
     } 

Antwort

2

Wenn eine HTTP-Anforderung fehlschlägt können Sie ein WebException zu fangen, und die Antwort vom Server zu lesen, da sie nützliche Informationen über den Grund enthalten könnten, warum die Anforderung fehlgeschlagen:

catch (WebException e) 
{ 
    using (var stream = e.Response.GetResponseStream()) 
    using (var reader = new StreamReader(stream)) 
    { 
     Console.WriteLine(reader.ReadToEnd()); 
    } 
} 

In Ihrem Fall diese Drucke:

{"error":"invalid_session_id","error_description":"Missing session id."} 

Also ich denke, dass der Server einige s erfordert ID-ID-Parameter, der zusammen mit der Anfrage gesendet werden soll. Weitere Informationen dazu finden Sie in der Dokumentation des Endpunkts, den Sie aufrufen möchten.

+0

Vielen Dank für den Tipp! Das ist wirklich nützlich! – Catalin