我需要使用curl(bash)与OwnCloud实例进行通信。
我知道如何下载存储在日历中的.ics文件列表:
curl -k --user "${login}:${password}" -X PROPFIND Source: "https://owncloud.jujens.eu/remote.php/caldav/calendars/jujens/defaultcalendar"
资料来源:(Use a webdav service with curl)
但是:如何在不打开文件的情况下下载文件的内容? 是否可以只下载范围内的日历条目?
答案 0 :(得分:1)
如何在不打开文件内容的情况下下载文件内容?
首先:单独下载文件有什么问题? (通过GET到给定的URL)除非您使用大量数据,这些数据应该很好,并且如果您并行发出GET,实际上可以更快。
如果服务器支持它(大部分都支持),您可以发出CalDAV multiget REPORT,RFC 4791 7.9。此处也有描述:Building a CalDAV client,例如:
REPORT /calendars/johndoe/home/ HTTP/1.1
Depth: 1
Prefer: return-minimal
Content-Type: application/xml; charset=utf-8
Accept: application/xml
<c:calendar-multiget xmlns="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<prop>
<getetag />
<c:calendar-data />
</prop>
<href>/calendars/johndoe/home/132456762153245.ics</href>
<href>/calendars/johndoe/home/fancy-caldav-client-1234253678.ics</href>
</c:calendar-multiget>
是否可以下载范围内的日历条目?
是的,您还可以使用CalDAV calendar-query REPORT下载给定时间范围的数据。例如:
REPORT /calendars/johndoe/home/ HTTP/1.1
Depth: 1
Prefer: return-minimal
Content-Type: application/xml; charset=utf-8
Accept: application/xml
<calendar-query xmlns:D="DAV:" xmlns="urn:ietf:params:xml:ns:caldav">
<D:prop>
<D:getetag />
<calendar-data />
</D:prop>
<filter>
<comp-filter name="VCALENDAR">
<comp-filter name="VEVENT">
<time-range start="20060104T000000Z"
end="20060105T000000Z"/>
</comp-filter>
</comp-filter>
</filter>
</calendar-query >
实际支持哪些日历过滤器因服务器而异。
要使用curl发布此类报告,请使用-X REPORT
并使用-d
嵌入查询。