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:
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:
Ich habe auch versucht, kopieren und die ganze Header (Alle Einstellungen) und als die Anfrage zu senden, aber die Antwort ist die gleiche:
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.
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
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
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