在C#中获取iCloud联系人列表

在搜索了iCloud API之后,我在NodeJS和Python上找到了一些例子,但不幸的是,我对它们并不熟悉。 我想知道如何在C#上获取iCloud联系人列表。

关于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:上面代码的错误请求,请帮忙去指出我错的方向,如果有代码示例,感谢您的帮助。

更新:

现在我可以登录并获取许多信息,包括我的联系服务器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 ,但根据我提到的示例,端口:443需要删除。

但我仍然得到421:客户端错误

我知道答案

首先,在这种情况下,请求应该是WebRequest,而不是WebClient。 在第一个api url: 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”(这两个值在webResponse的标题“Set-Cookie”中)

当您有足够的上述参数时,您可以获得icloud联系人列表,请按以下方式操作:

向此url发出GET请求: 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 = YYYYYYYYYY

之后,您将获得完整的iCloud联系人列表。

这种方式是Web服务基础,因此它可以使用多种语言,所以我认为这可以提供帮助。