在搜索了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
之后,我使用以下网址获取联系人列表:
https://p35-contactsws.icloud.com是我的联系服务器,实际上是https://p35-contactsws.icloud.com:443,但根据我提到的示例,端口:443需要删除。
但我仍然得到421:客户端错误
答案 0 :(得分:1)
我知道答案
首先,在这种情况下,请求应该是WebRequest,而不是WebClient。 在第一个api url:https://setup.icloud.com/setup/ws/1/login?clientBuildNumber=WHATEVERNUMBER&clientId=RANDOM_GUID: WebRequest应该是一个Post并包含appleid,密码在数据中,在标题中应该有Origin = 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,以及#34; X-APPLE-WEBAUTH-TOKEN"和" X-APPLE-WEBAUTH-USER" (这两个值在标题" Set-Cookie" webResponse中)
当你有足够的上述参数时,你可以获得icloud联系人列表,按照这种方式:
+ https://p35-contactsws.icloud.com:我的联系服务器网址,您的网址可能不同。
+ clientVersion:只留下2.1
+ MyGuid:您在第一次请求中使用的Guid。
重要提示:在标题中,必须包含:
Cookie:X-APPLE-WEBAUTH-TOKEN = XXXXXX; X-APPLE-WEBAUTH-USER = YYYYYYYYY
之后,您将获得完整的iCloud联系人列表。
这种方式是Web服务基础,因此可以使用多种语言,因此我认为这可以提供帮助。