iCloud日历请求

cli*_*cky 2 curl caldav icloud icloud-api

我正在尝试访问我的iCloud日历curl(在我编写任何代码之前使用它作为测试),但是我收到了未经授权的访问错误.有没有人有幸让这个工作?我已经用来提取我的用户ID,并通过给自己发送一个事件邀请来确定服务器ID.

命令运行

curl -u <apple email ID> https://<server id>-caldav.icloud.com/<user id>/calendars
Run Code Online (Sandbox Code Playgroud)

响应

<html><head><title>Unauthorized</title></head><body><h1>Unauthorized</h1><p>You are not authorized to access this resource.</p></body></html>
Run Code Online (Sandbox Code Playgroud)

编辑

我试图使用fiddler 复制查询,但继续得到502响应 - 连接失败SecurityException.

hnh*_*hnh 7

要访问iCloud日历或提醒,请使用名为CalDAV的IETF协议 . 构建CalDAV客户端 是如何做到这一点的一个很好的介绍.有了上述内容,您只需向GETAPI发出请求即可......

使用curl这是一个三步过程,例如,日历名称.首先,您需要找出代表您的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/
Run Code Online (Sandbox Code Playgroud)

如果您无法对此进行身份验证,则表明您使用了错误的凭据,您可能已为您的iCloud帐户启用了两步验证,或者已经过2017-06-15:"需要使用应用专用密码才能登录从6月15日开始使用第三方应用程序进行iCloud".在这种情况下,您需要 为CalDAV访问设置 特定应用程序的密码.

上面的卷曲显示了您的帐户记录的URL,它看起来像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/
Run Code Online (Sandbox Code Playgroud)

这为您提供了实际日历所依赖的集群的引用,它看起来像 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
Run Code Online (Sandbox Code Playgroud)

希望这能让你开始.