xml — чтение переполненного стека переполнения стека calDAV в iCloud

Я пытаюсь прочитать информацию о занятости из календаря iCloud.

Я основал свое решение на этом клиенте php https://github.com/muhlba91/icloud/blob/master/PHP/icloud.php

Что работает до сих пор:
Получение номера пользователя Apple из идентификатора Apple с использованием учетных данных, это необходимо для доступа к URL-адресу calDAV

Получение списка доступных календарей от пользователя (например, Дом, Работа, …)

Что не работает:
Я не могу получить действительный ответ от сервера Apple CalDAV.

Запрос (отредактированный):

$ctag_request="<A:propfind xmlns:A='DAV:' xmlns:cs='https://p01-caldav.icloud.com/**USERID**/calendars/home/'>
<A:prop>
<cs:getctag />
</A:prop>
</A:propfind>";$response=simplexml_load_string($this->doPropfindRequest($user['appleID'], $user['applepass'], $url, $ctag_request));

Это функция DoRequest. Это то же самое, что и функция propfind, которую я использую, чтобы получить идентификатор пользователя. & список календарей, за исключением CURLOPT_CUSTOMREQUEST, для которого установлено значение PROPFIND или REPORT.
Я делаю вывод, что часть моего решения cURL построена правильно.

function doReportRequest($user, $pw, $url, $xml)
{
//Init cURL
$c=curl_init($url);
//Set headers
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);
//Set SSL
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
//Set HTTP Auth
curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($c, CURLOPT_USERPWD, $user.":".$pw);
//Set request and XML
curl_setopt($c, CURLOPT_CUSTOMREQUEST, 'PROPFIND');
curl_setopt($c, CURLOPT_POSTFIELDS, $xml);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
//Execute
$data=curl_exec($c);
//Close cURL
curl_close($c);

return $data;
}

Однако, что Apple возвращает мне по этому запросу:

object(SimpleXMLElement)#259 (1) {
["response"]=>
object(SimpleXMLElement)#261 (2) {
["href"]=>
string(27) "/8126574070/calendars/home/"["propstat"]=>
object(SimpleXMLElement)#262 (2) {
["prop"]=>
object(SimpleXMLElement)#260 (1) {
["getctag"]=>
object(SimpleXMLElement)#263 (0) {
}
}
["status"]=>
string(22) "HTTP/1.1 404 Not Found"}
}
}

Я получаю ответ 404. Я думаю, что проблема в том, что URL-адрес неверен. Однако я нигде не могу найти в Интернете, какой правильный URL-адрес Apple Caldav.

Я надеюсь, что есть какой-то эксперт CalDAV, который может помочь мне в этом вопросе.

РЕДАКТИРОВАТЬ

Хорошо, я отредактировал код / ​​вопрос, так как свободная занятость не поддерживается Apple, и она почти не работает.

0

Решение

Предварительное условие поддерживаемого отчета по методу REPORT задокументировано здесь: http://www.webdav.org/specs/rfc3253.html#rfc.iref.d.17

Это просто означает, что этот календарь iCloud не поддерживает запросы freebusy. То же самое можно увидеть в приложении календаря OS X, если вы создаете событие и открываете панель доступности.
Там написано «этот календарь не поддерживает доступность» …

Чтобы расширить ответ на отредактированный вопрос: Это неправильно:

$ctag_request="<A:propfind xmlns:A='DAV:' xmlns:cs='https://p01-caldav.icloud.com/**USERID**/calendars/home/'>
<A:prop>
<cs:getctag />
</A:prop>
</A:propfind>";

Пространство имен getctag свойство «http://calendarserver.org/ns/«. Попробуй это:

$ctag_request="<propfind xmlns='DAV:'>
<prop>
<getctag xmlns='http://calendarserver.org/ns/' />
</prop>
</propfind>";

https://p01-caldav.icloud.com/ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ/ calendars / home / — это URL-адрес коллекции календаря. Это не пространство имен XML.

И да, если вы получите 404, ваш URL неверен / не существует.

Другая проблема может быть в том, что ваши учетные данные неверны. Вы предоставляете пароль приложения в вашей основной аутентификации?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector