Я пытаюсь получить несколько событий в caldav, используя запрос на многопоточность, как объясните здесь: http://sabre.io/dav/building-a-caldav-client
или здесь: Чтение данных календаря Apple / iCloud с использованием PHP / CalDAV
Это должно быть так же просто, как прохождение:
<?xml version="1.0" encoding="UTF-8"?> <B:calendar-multiget xmlns:B="urn:ietf:params:xml:ns:caldav"> <A:prop xmlns:A="DAV:"> <B:calendar-data/> </A:prop> <A:href xmlns:A="DAV:">/calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/00ECD3D1-72D0-4F56-9011-71A6180F848C.ics</A:href> </B:calendar-multiget>
Я использую PHP для передачи запроса XML. Но в ответе XML нет календарных данных:
SimpleXMLElement Object ( [response] => SimpleXMLElement Object ( [href] => /calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/00ECD3D1-72D0-4F56-9011-71A6180F848C.ics [propstat] => SimpleXMLElement Object ( [prop] => SimpleXMLElement Object ( [calendar-data] => SimpleXMLElement Object ( ) ) [status] => HTTP/1.1 200 OK ) ) )
Я использую simplexml_load_string и print_r для отображения результата. Как я могу получить данные календаря?
Метод GET работает нормально, но слишком медленный, когда я не обновляю> 50 событий.
EDIT: Я могу заставить его работать с помощью Curl в терминале, как было предложено hnh. Но это не работает, используя curl в php. Вот код, который я использую (элемент url, log, pass, xml-запрос те же, что и в терминале):
$xml= '<C:calendar-multiget xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><prop><C:calendar-data/></prop><href>/calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/94DA9025-02E5-4313-BF81-66641BC5989F.ics</href><href>/calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/175CA348-8877-4CDF-B19D-4C66E191F4B4.ics</href></C:calendar-multiget>'; $user = "MyLogin"; $pw= "MyPsw"; $url = "https://localhost:443/calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/"; $data = doRequest($user, $pw, $url, $xml); print "<pre>"; print_r($data); print "</pre>"; function doRequest($user, $pw, $url, $xml) { $c=curl_init($url); curl_setopt($c, CURLOPT_HTTPHEADER, array("Depth: 1", "Content-Type: text/xml; charset='UTF-8'", "User-Agent: DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)")); curl_setopt($c, CURLOPT_HEADER, 0); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($c, CURLOPT_USERPWD, $user.":".$pw); curl_setopt($c, CURLOPT_CUSTOMREQUEST, "REPORT"); curl_setopt($c, CURLOPT_POSTFIELDS, $xml); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); $data=curl_exec($c); curl_close($c); return $data; }
Он не возвращает никаких данных календаря:
/calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/175CA348-8877-4CDF-B19D-4C66E191F4B4.ics HTTP/1.1 200 OK /calendars/__uids__/DE6BFE56-B3DC-4C60-A9C7-ED05A45AAC92/calendar/94DA9025-02E5-4313-BF81-66641BC5989F.ics HTTP/1.1 200 OK