2017-09-05 1 views
0

Ich versuche mich in iCloud mit einer Json Post-Anfrage in C# anzumelden. Bevor ich versuchte, den Code zu implementieren, studierte ich ein wenig die iCloud-Anfragen mit Chrome Console und mit einem Ad-on, um die Anfragen zu replizieren, um das gleiche Ergebnis der Website zu erhalten.Melden Sie sich bei iCloud über Json an. Beitragsanfrage

Als erstes habe ich die Anfrage direkt von iCloud Website überprüft:

enter image description here

Und das ist die Antwort:

{ 
"serviceErrors" : [ { 
"code" : "-20101", 
"message" : "Il tuo ID Apple o la password non sono corretti." 
} ] 
} 

Mit "Advance-REST-Client" ad Chrome-Plugin die replizieren Anfrage Ich habe die gleiche JSON-Anfrage an die selbe URL versucht. Aber ich bekomme Leere Antwort: enter image description here

Ich habe auch versucht, kopieren und die ganze Header (Alle Einstellungen) und als die Anfrage zu senden, aber die Antwort ist die gleiche: enter image description here

Wer eine Beratung hat?

UPDATE: Ich habe versucht, eine JSON-Anfrage durch C# Programm zu implementieren:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://idmsa.apple.com/appleauth/auth/signin"); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "{accountName: \"briesanji @gmail.com\", password: \"testPassword\", rememberMe: false, trustTokens: []}"; 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
     } 

Das Problem ist, dass die Ausführung bricht, wenn die

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 

getroffen wird, und es gibt mir diese Fehlermeldung: System. Net.WebException: 'Fehler Remote Server: (400) Anfrage nicht gültig.'

UPDATE: Ich auf diese Weise gelöst:

void POST(string url, string jsonContent) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Method = "POST"; 

     System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
     Byte[] byteArray = encoding.GetBytes(jsonContent); 

     request.ContentLength = byteArray.Length; 
     request.ContentType = @"application/json"; 

     using (Stream dataStream = request.GetRequestStream()) 
     { 
      dataStream.Write(byteArray, 0, byteArray.Length); 
     } 
     long length = 0; 
     try 
     { 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       length = response.ContentLength; 
      } 
     } 
     catch (WebException ex) 
     { 
      // Log exception and throw as for GET example above 
     } 
    } 

    string GET(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     try 
     { 
      WebResponse response = request.GetResponse(); 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       return reader.ReadToEnd(); 
      } 
     } 
     catch (WebException ex) 
     { 
      WebResponse errorResponse = ex.Response; 
      using (Stream responseStream = errorResponse.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
       String errorText = reader.ReadToEnd(); 
       // log errorText 
      } 
      throw; 
     } 
    } 

Anyways testete ich die Antwort auch und es war gut zu .. Also ich schau es als gültig Dank.

+0

Warum C#, wenn Sie eine json Anfrage wollen aus Chrom? Wie auch immer, soweit ich sehe, verwenden Sie genau die gleichen Cookie-Daten und den gleichen WidgetKey im Chrome-Dump und im Rest-Client. Ich denke, Sie müssen eine Anfrage an die Original-URI ohne den Widget-Schlüssel erstellen und den WidgetKey und die Cookie-Daten aus dieser Antwort erhalten - dann senden Sie Ihre Login-Daten an diese neue URI ... ** nicht getestet ** – Michael

+0

Nono Ich möchte C# -Code verwenden .. Aber wie du in den ersten zwei Zeilen meines Beitrags lesen kannst .. Ich möchte nur testen wie die JSON Anfrage eingestellt werden soll .. Egal .. In meinem zweiten ScreenShot habe ich getan was du sagst und ich hatte kein Ergebnis .. in AnyCase werde ich die Post mit dem C# -Code so schnell wie möglich aktualisieren. – Briesanji

+0

In Ihrem zweiten Screenshot senden Sie die Login Daten ohne einen WidgetKey in der URI. Und in deinem dritten Screenshot hast du das selbe Zieluri benutzt ... – Michael

Antwort

1

Damit bekomme ich nicht alle Fehler und den Antwortinhalt der zweiten Anforderung nur mir sagt, dass es zu viele fehlgeschlagene Anmeldungen für das Testkonto waren ...

private static void ICloud() 
    { 
     var cc = new CookieContainer(); 

     var first = (HttpWebRequest)WebRequest.Create("https://idmsa.apple.com/appleauth/auth/signin?widgetKey=83545bf919730e51dbfba24e7e8a78d2&locale=de_DE&font=sf"); 
     first.Method = "GET"; 
     first.CookieContainer = cc; 

     var response1 = (HttpWebResponse)first.GetResponse(); 
     using (var streamReader = new StreamReader(response1.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
     } 

     var second = (HttpWebRequest)WebRequest.Create("https://idmsa.apple.com/appleauth/auth/signin"); 
     second.ContentType = "application/json"; 
     second.Method = "POST"; 
     second.Accept = "application/json"; 
     second.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); 
     second.Referrer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=83545bf919730e51dbfba24e7e8a78d2&locale=de_DE&font=sf"; 
     second.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
     second.Headers.Add("X-Apple-Widget-Key", "83545bf919730e51dbfba24e7e8a78d2"); 

     using (var streamWriter = new StreamWriter(second.GetRequestStream())) 
     { 
      string json = "{\"accountName\":\"[email protected]\",\"password\":\"test\",\"rememberMe\":false,\"trustTokens\":[]}"; 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 
     } 

     try 
     { 
      var response2 = (HttpWebResponse)second.GetResponse(); 
      using (var streamReader = new StreamReader(response2.GetResponseStream())) 
      { 
       var result = streamReader.ReadToEnd(); 
      } 
     } 
     catch(WebException we) 
     { 
      using (var r = new StreamReader(we.Response.GetResponseStream())) 
      { 
       var result2 = r.ReadToEnd(); 
      } 
     } 
    } 
+0

Erhalten Sie eine lange Html-Datei als Antwort zu? – Briesanji

+0

@Briesanji Yep. Ich habe das Loch html Seite von icloud .com ... mit der Nachricht, dass es zu viele Anmeldeversuche gab und dass das Konto entsperrt werden muss ... – Michael

+0

Mhhhh .. ist die gleiche Nachricht, die ich erhalte, wenn ich versuche, mich mit meinen echten Anmeldeinformationen einzuloggen Die Antwort ist fast richtig, aber es gibt etwas, das ich vermisse (Ich habe versucht, mich mit meinem Konto auf der Icloud-Seite anzumelden und alles läuft gut) Ich bekomme auch den gleichen Fehler mit meiner E-Mail und Einfügen eines falschen Passworts. Aber ich erwarte diese Antwort, wenn die PWD falsch ist: "{ " serviceErrors ": [{ " code ":" -20101 ", " Nachricht ":" Il tuo ID Apple oder Passwort nicht Sono cortetti. " }] } " – Briesanji

Verwandte Themen