Calendar CalDAV请求gGt iCloud日历事件
我正在尝试构建一个HTTP请求,以从iCloud日历获取事件。我可以通过PROPFIND获取日历的详细信息,也可以通过事件id(get)获取单个日历事件的详细信息,但无法编写返回指定时间范围内的日历事件的请求 有人能看到我在下面的代码中做错了什么吗?我得到的唯一回应是(代码207)。在设置的时间范围内,日历中只有一个事件Calendar CalDAV请求gGt iCloud日历事件,calendar,icalendar,webdav,caldav,Calendar,Icalendar,Webdav,Caldav,我正在尝试构建一个HTTP请求,以从iCloud日历获取事件。我可以通过PROPFIND获取日历的详细信息,也可以通过事件id(get)获取单个日历事件的详细信息,但无法编写返回指定时间范围内的日历事件的请求 有人能看到我在下面的代码中做错了什么吗?我得到的唯一回应是(代码207)。在设置的时间范围内,日历中只有一个事件 <multistatus xmlns="DAV:"/> 没有像深度:2这样的东西。您可能需要深度:1 检查:这是关于日历提供程序实现的。请求的主体完全正常,看到事
<multistatus xmlns="DAV:"/>
没有像
深度:2
这样的东西。您可能需要深度:1
检查:这是关于日历提供程序实现的。请求的主体完全正常,看到事件iCalendar表示,请求的响应应该返回事件 我看到的唯一可能导致这种情况的原因是
preference:returnminimal
头。请参阅以了解更多信息。日历查询报告
仅请求日历数据
。通常,客户端请求etag
,因此它会检查它拥有的日历对象与服务器中的日历对象之间是否有任何差异,如果有任何不同的日历对象,则客户端会发送一份CALDAV:calendar multiget报告,其中包含不同日历对象的href
尝试删除首选项:返回最小的标题,或者尝试更改
<d:prop>
<c:calendar-data />
</d:prop>
到
希望它能有所帮助。按照建议,试着只询问etag,然后使用已回答的URL创建日历multiget报告
我可以建议您使用fiddler或任何其他程序,以便您可以清楚地看到请求和响应。还可以尝试查看来自其他客户端的请求,例如emClient。Method-:REPORT
Method-: REPORT
Content type-: application/xml; charset=utf-8
Header -: Depth : 1
URL-:GET /<ICLOUD_USER_ID>/calendars/
Set credentials
Following is RequestContent-:
<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='DESCRIPTION'/>
<C:prop name='STATUS'/>
<C:prop name='TRANSP'/>
<C:prop name='ATTENDEE'/>
<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>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name='VCALENDAR'>
<C:comp-filter name='VEVENT'>
<C:time-range start='20160524T000000Z'
end='20160526T000000Z'/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
内容类型-:应用程序/xml;字符集=utf-8
标题-:深度:1
URL-:获取//日历/
设置凭据
以下是请求内容-:
我认为问题在于URL和使用的方法。使用URL直到日历(即/ICLOUD\u USER\u ID/calendars/和方法)应报告。更改为深度1,结果无变化,但感谢您的发现。您可以添加活动的iCalendar吗?你确定你查询的日历是正确的吗?肯定我的日历是正确的,因为我可以使用GET请求从该日历中检索单个事件;只是报告请求似乎对meAdd不起作用GET to your QI返回的iCalendar添加了它-事件ID来自从OS X Calendar App导出ics文件,然后读取其ID并将其添加到请求中,因为它看起来很不寻常-可以肯定的是,你真的是在查询两天,而不是一天,从5/24到5/26?因为您的4/25事件实际上是UTC中的4/24…返回最小值是不太可能的原因,但是查询etag是一个非常好的建议。很可能服务器只支持时间范围查询的属性子集。我知道这不太可能发生,但使用该标题请求日历数据
没有意义,因为对该标题的响应根本不会最小。这就是为什么我认为他应该删除标题并请求日历数据
,或者请求具有相同标题的etag
。为getetag指定标题也没有意义,因为此属性“始终”存在。它主要用于日历集合,因为这些集合的属性不太统一。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.11.2//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Australia/Sydney
X-LIC-LOCATION:Australia/Sydney
BEGIN:STANDARD
DTSTART:18950201T000000
RDATE;VALUE=DATE-TIME:18950201T000000
TZNAME:AEST
TZOFFSETFROM:+100452
TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19170101T000100
RDATE;VALUE=DATE-TIME:19170101T000100
RDATE;VALUE=DATE-TIME:19420101T020000
RDATE;VALUE=DATE-TIME:19420927T020000
RDATE;VALUE=DATE-TIME:19431003T020000
RDATE;VALUE=DATE-TIME:19861019T020000
RDATE;VALUE=DATE-TIME:20000827T020000
TZNAME:AEDT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19170325T020000
RDATE;VALUE=DATE-TIME:19170325T020000
RDATE;VALUE=DATE-TIME:19420329T020000
RDATE;VALUE=DATE-TIME:19720227T030000
RDATE;VALUE=DATE-TIME:19820404T030000
RDATE;VALUE=DATE-TIME:20060402T030000
RDATE;VALUE=DATE-TIME:20070325T030000
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
DTSTART:19430328T020000
RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
DTSTART:19710101T000000
RDATE;VALUE=DATE-TIME:19710101T000000
TZNAME:AEST
TZOFFSETFROM:+1000
TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19711031T020000
RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AEDT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19730304T030000
RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
DTSTART:19830306T030000
RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
DTSTART:19860316T030000
RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19871025T020000
RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AEDT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19900304T030000
RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
DTSTART:19960331T030000
RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20011028T020000
RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AEDT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20080406T030000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZNAME:AEST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20081005T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:AEDT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20160331T004928Z
UID:86ABADB9-CDC3-45D0-B932-5420DC10390A
DTEND;TZID=Australia/Sydney:20160425T093000
SUMMARY:Sample Event
DTSTART;TZID=Australia/Sydney:20160425T073000
DTSTAMP:20160509T000541Z
LAST-MODIFIED:20160408T220749Z
SEQUENCE:1
TRANSP:OPAQUE
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
END:VEVENT
END:VCALENDAR
<d:prop>
<c:calendar-data />
</d:prop>
<d:prop>
<d:getetag />
</d:prop>
Method-: REPORT
Content type-: application/xml; charset=utf-8
Header -: Depth : 1
URL-:GET /<ICLOUD_USER_ID>/calendars/
Set credentials
Following is RequestContent-:
<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='DESCRIPTION'/>
<C:prop name='STATUS'/>
<C:prop name='TRANSP'/>
<C:prop name='ATTENDEE'/>
<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>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name='VCALENDAR'>
<C:comp-filter name='VEVENT'>
<C:time-range start='20160524T000000Z'
end='20160526T000000Z'/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>