Получить список контактов 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/ - мой контактный сервер, на самом деле это 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.
Этот способ является основой веб-службы, поэтому он может работать на многих языках, поэтому я думаю, что это может помочь.