【发布时间】:2015-03-06 17:33:59
【问题描述】:
我正在尝试通过 caldav 协议根据其 UID 检索特定的 ICloud 事件。
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<D:getetag/>
<C:calendar-data>
<C:comp name="VCALENDAR">
<C:prop name="VERSION"/>
<C:comp name="VEVENT">
<C:prop name="SUMMARY"/>
<C:prop name="UID"/>
<C:prop name="DTSTART"/>
<C:prop name="DTEND"/>
<C:prop name="DURATION"/>
<C:prop name="RRULE"/>
<C:prop name="RDATE"/>
<C:prop name="EXRULE"/>
<C:prop name="EXDATE"/>
<C:prop name="RECURRENCE-ID"/>
</C:comp>
<C:comp name="VTIMEZONE"/>
</C:comp>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:prop-filter name="UID">
<C:text-match>$$EVENT_UID$$</C:text-match>
</C:prop-filter>
</C:comp-filter>
</C:comp-filter>
</C:filter>
当我将 C:prop-filter name="UID" 替换为 C:prop-filter name="SUMMARY" 时,请求在 204 下工作正常,但我尝试使用 UID,我得到 403 Forbidden。
【问题讨论】:
-
有点离题,但只是为了确保:记住 text-match 会进行 substring 搜索。因此,如果您执行上述操作,请确保您进一步过滤查询结果以获得完全匹配。 (例如,一个 UID 可能是 AA,另一个可能是 AABB)。
-
这也不能完全回答您的问题,但无论如何它可能会对您有所帮助:如果您在使用 PROPFIND 或类似名称列出事件后尝试获取事件,我会通过
<href>进行操作。与通过 UID 获取和查询不同,它主要保证所有未完全损坏的服务器都支持。
标签: ruby-on-rails calendar icloud webdav caldav