我试图通过curl
访问我的iCloud日历(在我编写任何代码之前将其作为测试使用),但我发现未经授权的访问错误。有没有人有幸让这个工作?我已使用jQuery change CSS after a certain amount of time提取用户ID ,并通过向自己发送活动邀请来确定服务器ID。
命令运行
curl -u <apple email ID> https://<server id>-caldav.icloud.com/<user id>/calendars
响应
<html><head><title>Unauthorized</title></head><body><h1>Unauthorized</h1><p>You are not authorized to access this resource.</p></body></html>
修改的
我尝试使用fiddler复制this查询但仍然获得502响应 - 连接失败并显示SecurityException
。
答案 0 :(得分:7)
要访问iCloud日历或提醒,请使用名为的IETF协议
CalDAV。
Building a CalDAV client
是一个很好的介绍如何做到这一点。
有了上述内容,您只需在API上发出GET
请求...
使用curl,比较日历名称需要3个步骤。第一 你需要找出代表你的iCloud帐户的URL(称为 WebDAV中的 Principal 说话):
curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 0" \
--data "<propfind xmlns='DAV:'><prop><current-user-principal/></prop></propfind>" \
https://caldav.icloud.com/
如果您无法对此进行身份验证,则表明您使用了错误的凭据,您可能已为您的iCloud帐户启用了两步验证,或者它已经过2017-06-15:“将需要应用专用密码从6月15日开始使用第三方应用登录iCloud“。 在这种情况下,您需要设置一个 app-specific password 用于CalDAV访问。
上面的卷曲显示了您的帐户记录的网址
像https://caldav.icloud.com/347723822/principal/
这样的东西。
下一步是确定托管日历的位置。那是存储的
在校长的帐户calendar-home-set
属性中,可以
如此访问:
curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 0" \
--data "<propfind xmlns='DAV:' xmlns:cd='urn:ietf:params:xml:ns:caldav'><prop><cd:calendar-home-set/></prop></propfind>" \
https://caldav.icloud.com/827267162/principal/
这为您提供了实际日历所在的群集的引用,
它看起来像
https://p22-caldav.icloud.com:443/827161622/calendars
。
假设您想获取用户拥有的所有日历的名称:
curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 1" \
--data "<propfind xmlns='DAV:'><prop><displayname/></prop></propfind>" \
https://p42-caldav.icloud.com:443/28377271/calendars/ \
| grep displayname
希望这能让你开始。