iCloud vcalendar 多个事件
iCloud vcalendar multiple events
我正在尝试一次将多个事件插入 iCloud 日历。如果我使用这个 vcalendar,一切正常:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
END:VCALENDAR
但是,如果我将事件数量加倍,就像这样,我会收到错误 "unforbidden"。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
BEGIN:VEVENT
UID:12345678
DTSTART:20150214T170000Z
DTEND:20150214T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event or is it
END:VEVENT
END:VCALENDAR
我发送PUT请求到(当然我是认证通过的,也是因为第一次请求成功):
https://p01-caldav.icloud.com:443/xxxxxxxx/calendars/work/xxxxxxx.ics
具体错误为:
<?xml version='1.0' encoding='UTF-8'?>
<error
xmlns='DAV:'>
<valid-calendar-object-resource
xmlns='urn:ietf:params:xml:ns:caldav'/>
</error>
关于为什么会发生这种情况的任何想法,更重要的是:如何解决它?
类似于这个问题:。
iCloud 日历是一个 CalDAV 服务器。在 CalDAV 中
(RFC 4791 Section 4.1)
日历中的每个 event/todo 都由不同的 HTTP 资源表示,并且
因此需要有一个不同的 URL.
您正在尝试将多个事件放入一个资源中,这就是为什么
'valid-calendar-object-resource' 提出前提条件(不是有效的 CalDAV
资源,因为它包含多个不属于重复集的 VEVENTs 部分。
没有 RFC 的标准方法可以一次将多个项目添加到 DAV
服务器,但有些(包括 Apple CalendarServer 和 iCloud)支持这种批量上传草稿:
Calendar Server Bulk Change Requests for *DAV Protocols.
本质上,在您的情况下,不是对 /xx/calendars/work/abc.ics 执行 PUT,而是尝试 POST 对 /xx/calendars/work/。
然后服务器将为您创建单独的日历子资源。
P.S.: 你的请求中有一个额外的错误。您对多个事件(不属于重复集的一部分)使用相同的 UID (12345678)。您需要分配唯一的 UID。
我正在尝试一次将多个事件插入 iCloud 日历。如果我使用这个 vcalendar,一切正常:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
END:VCALENDAR
但是,如果我将事件数量加倍,就像这样,我会收到错误 "unforbidden"。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp.//CalDAV Client//EN
BEGIN:VEVENT
UID:12345678
DTSTART:20150213T170000Z
DTEND:20150213T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event
END:VEVENT
BEGIN:VEVENT
UID:12345678
DTSTART:20150214T170000Z
DTEND:20150214T180000Z
DTSTAMP:20150210T182145Z
SUMMARY:This is an event or is it
END:VEVENT
END:VCALENDAR
我发送PUT请求到(当然我是认证通过的,也是因为第一次请求成功):
https://p01-caldav.icloud.com:443/xxxxxxxx/calendars/work/xxxxxxx.ics
具体错误为:
<?xml version='1.0' encoding='UTF-8'?>
<error
xmlns='DAV:'>
<valid-calendar-object-resource
xmlns='urn:ietf:params:xml:ns:caldav'/>
</error>
关于为什么会发生这种情况的任何想法,更重要的是:如何解决它?
类似于这个问题:。
iCloud 日历是一个 CalDAV 服务器。在 CalDAV 中 (RFC 4791 Section 4.1) 日历中的每个 event/todo 都由不同的 HTTP 资源表示,并且 因此需要有一个不同的 URL.
您正在尝试将多个事件放入一个资源中,这就是为什么 'valid-calendar-object-resource' 提出前提条件(不是有效的 CalDAV 资源,因为它包含多个不属于重复集的 VEVENTs 部分。
没有 RFC 的标准方法可以一次将多个项目添加到 DAV 服务器,但有些(包括 Apple CalendarServer 和 iCloud)支持这种批量上传草稿: Calendar Server Bulk Change Requests for *DAV Protocols.
本质上,在您的情况下,不是对 /xx/calendars/work/abc.ics 执行 PUT,而是尝试 POST 对 /xx/calendars/work/。 然后服务器将为您创建单独的日历子资源。
P.S.: 你的请求中有一个额外的错误。您对多个事件(不属于重复集的一部分)使用相同的 UID (12345678)。您需要分配唯一的 UID。