我正在尝试通过iCloud访问我的curl日历(在编写任何代码之前使用它作为测试),但是会出现未经授权的访问错误。有人运气好吗?我使用这提取我的用户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复制这查询,但是一直得到一个502响应-- SecurityException连接失败。
发布于 2017-02-19 12:26:01
要访问iCloud日历或提醒,可以使用名为CalDAV的IETF协议。构建CalDAV客户端是关于如何做到这一点的一个很好的介绍。使用上面的内容,您只是在API上抛出一个GET请求.
使用curl是一个三步的过程,例如,日历名称。首先,您需要找出表示您的iCloud帐户的URL (在WebDAV中称为主体):
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”。在这种情况下,您需要为应用专用密码访问设置一个CalDAV。
上面的curl显示了您的帐户记录的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/这为您提供了对实际日历所使用的集群的引用,它看起来类似于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希望这能让你开始。
https://stackoverflow.com/questions/42319487
复制相似问题