通过Json Post请求登录iCloud

时间:2017-09-05 14:21:10

标签: c# json

我尝试使用C#中的Json Post请求登录iCloud。在尝试实施代码之前,我正在研究一些使用Chrome控制台的iCloud请求,并使用Ad-on复制请求以获得相同的网站结果。

首先,我直接从iCloud网站查看了请求:

enter image description here

这就是回应:

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

使用"高级REST客户端"广告Chrome插件复制请求我尝试过同样的Json请求到同一个Url。但我得到空响应: enter image description here

我还试图复制并粘贴整个标题(所有设置)而不是发送请求,但响应是相同的: enter image description here

有人有建议吗?

更新:我尝试通过c#程序实现A Json请求:

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();
        }

问题是执行在

时中断
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

命中,它给了我这个错误:System.Net.WebException:'错误远程服务器:(400)请求无效。'

更新:我以这种方式解决了:

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;
        }
    }

无论如何我也测试了答案,这对我来说很好..所以我把它检查为有效的谢谢。

1 个答案:

答案 0 :(得分:1)

有了这个我没有得到任何错误,第二个请求的响应内容只是告诉我,测试帐户的登录失败太多......

    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\":\"test@icloud.com\",\"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();
            }
        }
    }