iCloud日历请求

时间:2017-02-18 19:08:17

标签: curl icloud caldav icloud-api

我试图通过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

1 个答案:

答案 0 :(得分:7)

要访问iCloud日历或提醒,请使用名为的IETF协议 CalDAVBuilding 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

希望这能让你开始。