Получить список контактов iCloud в C#

После поиска API iCloud я нашел несколько примеров на NodeJS и Python, но, к сожалению, я не знаком с ними. Я хочу знать, как получить список контактов iCloud на C#.

Пример на python: https://github.com/mindcollapse/iCloud-API/blob/master/iCloud.py Пример на NodeJS: https://www.snip2code.com/Snippet/65033/Request-Contact-List-From-iCloud

Я пытаюсь разобрать код входа в C#:

        private void iCloudLogin()
        {
            string guiid = Guid.NewGuid().ToString("N");
            //string url = "https://p12-setup.icloud.com/setup/ws/1/login?clientBuildNumber=1P24&clientId=" + guiid;
            string url = "https://setup.icloud.com/setup/ws/1/login?clientBuildNumber=1P24&clientId=" + guiid;

            using (var client = new WebClient())
            {
                client.Headers.Set("Origin", "https://www.icloud.com");
                client.Headers.Set("Referer", "https://www.icloud.com");
                client.Headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36");

                var values = new NameValueCollection();
                values["apple_id"] = appleId;
                values["password"] = password;
                values["extended_login"] = "false";

                var response = client.UploadValues(url, values);
            }
        }

Я получаю запрос 400: Bad с указанным выше кодом, помогите, пожалуйста, укажите направление, в котором я ошибаюсь, я ценю вашу помощь, если есть пример кода.

Обновить:

Теперь я могу войти и получить много информации, включая URL-адрес моего сервера контактов, dsid, вот ссылка, которую я использовал:

https://p12-setup.icloud.com/setup/ws/1/login?clientBuildNumber=1P24&clientId=MyGuid

После этого я использую ниже URL, чтобы получить список контактов:

https://p35-contactsws.icloud.com/co/startup?clientBuildNumber=1P24&clientId=MyGuid&clientVersion=2.1&dsid=MyDSID&locale=en-EN&order=last%2Cfirst

https://p35-contactsws.icloud.com/ - мой контактный сервер, на самом деле это https://p35-contactsws.icloud.com/, но, исходя из примера, на который я ссылаюсь, порт:443 необходимо удалить.

Но я все еще получаю 421: Ошибка клиента

1 ответ

Решение

Я знаю ответ

Во-первых, в этом случае запрос должен быть WebRequest, а не WebClient. В первом URL-адресе API: https://setup.icloud.com/setup/ws/1/login?clientBuildNumber=WHATEVERNUMBER&clientId=RANDOM_GUID: WebRequest должен быть Post и включать appleid, пароль в данные, а в заголовке должен быть Происхождение = https://www.icloud.com/:

private void iCloudLogin() 
{        
    string data = "{\"apple_id\":" + appleId + ", \"password\":" + password + ", \"extended_login\":false}";
    byte[] dataStream = Encoding.UTF8.GetBytes(data);
    WebRequest webRequest = WebRequest.Create(url);
    webRequest.Method = "POST";
    webRequest.Headers.Set("Origin", "https://www.icloud.com");
    webRequest.ContentLength = dataStream.Length;
    Stream newStream=webRequest.GetRequestStream();
    // Attach the data.
    newStream.Write(dataStream,0,dataStream.Length);
    newStream.Close();
    WebResponse webResponse = webRequest.GetResponse();
    // get contact server url, dsid, Cookie
}

Сервер iCloud ответит URL-адресу контактного сервера, dsid, а также "X-APPLE-WEBAUTH-TOKEN" и "X-APPLE-WEBAUTH-USER" (эти два значения находятся в заголовке "Set-Cookie" webResponse)

Если у вас достаточно параметров, указанных выше, вы можете получить список контактов icloud, следуя по этому пути:

Сделайте запрос GET на этот URL: https://p35-contactsws.icloud.com/co/startup?clientBuildNumber=1P24&clientId=MyGuid&clientVersion=2.1&dsid=MyDSID&locale=en-EN&order=last%2Cfirst

+ https://p35-contactsws.icloud.com/: URL моего контактного сервера, ваш может быть другим.

+ clientVersion: просто оставьте его 2.1

+ MyGuid: Guid, который вы использовали в первом запросе.

Важно: в шапке обязательно должны быть указаны:

Происхождение: https://www.icloud.com/

Cookie: X-APPLE-WEBAUTH-TOKEN=XXXXXX;X-APPLE-WEBAUTH-USER= ГГГГГГГ

После этого вы получите полный список контактов iCloud.

Этот способ является основой веб-службы, поэтому он может работать на многих языках, поэтому я думаю, что это может помочь.

Другие вопросы по тегам