2017-05-03 48 views
0

我需要使用curl(bash)與OwnCloud實例進行通信。通過cUrl下載和操作OwnCloud CalDAV的整個/範圍

我知道該怎麼做下載.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

但是:如何下載文件的內容,而無需打開每個一? 是否可以只下載一個範圍內的日曆條目?

回答

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嵌入查詢。