Caldav сервер отвечает 403

Я пытаюсь подключиться к серверу Caldav с помощью клиента PHP. Я нашел эту клиентскую библиотеку http://repo.or.cz/w/davical.git/blob/HEAD:/inc/caldav-client.php и я пытаюсь следовать примеру, обмен доменом / имя пользователя / пароль здесь.

$cal = new CalDAVClient( "http://192.168.10.11/caldav/users/domain.com/user-name/", "user-name", "password" );
$options = $cal->DoOptionsRequest();
if ( isset($options["PROPFIND"]) ) {
// Fetch some information about the events in that calendar
$cal->SetDepth(1);
$folder_xml = $cal->DoXMLRequest("PROPFIND", '<?xml version="1.0" encoding="utf-8" ?><propfind xmlns="DAV:"><prop><getcontentlength/><getcontenttype/><resourcetype/><getetag/></prop></propfind>' );
}
var_dump($folder_xml);exit;

Это уже возвращает мне 403 Forbidden:

string(1928) "HTTP/1.1 207 Multi status
Connection: Close
Content-Type: text/xml; charset="utf-8"Date: Fri, 2 Oct 2015 07:02:28 GMT
DAV: 1, access-control, calendar-access, calendar-schedule, calendar-proxy, calendar-availability, calendarserver-private-events, calendar-auto-schedule, calendarserver-principal-property-search, calendarserver-sharing, calendarserver-sharing-no-scheduling, addressbook, calendar-default-alarms
Server: Kerio Connect 8.5.1
Transfer-Encoding: chunked
X-UA-Compatible: IE=edge

584
<?xml version="1.0" encoding="UTF-8"?><a:multistatus xmlns:a="DAV:" xmlns:c="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" xmlns:b="xml:"><a:response><a:href>/caldav/users/domain.com/user-name/</a:href><a:propstat><a:status>HTTP/1.1 200 OK</a:status><a:prop><a:resourcetype><a:collection/><a:principal/></a:resourcetype></a:prop></a:propstat><a:propstat><a:status>HTTP/1.1 403 Forbidden</a:status><a:prop><a:getcontentlength/><a:getcontenttype/><a:getetag/></a:prop></a:propstat></a:response><a:response xmlns:d="http://calendarserver.org/ns/"><a:href>/caldav/users/domain.com/user-name/calendar-proxy-write/</a:href><a:propstat><a:status>HTTP/1.1 200 OK</a:status><a:prop><a:resourcetype><a:collection/><a:principal/><d:calendar-proxy-write/></a:resourcetype></a:prop></a:propstat><a:propstat><a:status>HTTP/1.1 403 Forbidden</a:status><a:prop><a:getcontentlength/><a:getcontenttype/><a:getetag/></a:prop></a:propstat></a:response><a:response xmlns:e="http://calendarserver.org/ns/"><a:href>/caldav/users/domain.com/user-name/calendar-proxy-read/</a:href><a:propstat><a:status>HTTP/1.1 200 OK</a:status><a:prop><a:resourcetype><a:collection/><a:principal/><e:calendar-proxy-read/></a:resourcetype></a:prop></a:propstat><a:propstat><a:status>HTTP/1.1 403 Forbidden</a:status><a:prop><a:getcontentlength/><a:getcontenttype/><a:getetag/></a:prop></a:propstat></a:response></a:multistatus>
0

"

Любая идея, где я мог бы искать, чтобы исправить запрещенные ошибки? Я понятия не имею, почему я ничего не получаю.

редактировать:
Я наконец нашел время, чтобы разобраться в этом, но нашел только несколько журналов, но пока нет решения. Не могу понять, что идет не так, но это то, что я нашел в журналах

[07/Dec/2015 15:29:51][21240] {https} Task 202600 handler BEGIN
[07/Dec/2015 15:29:51][21240] {https} Task 202600 handler starting
[07/Dec/2015 15:29:51][21240] {https} HTTPS connection from 192.168.10.91:59937 started
[07/Dec/2015 15:29:51][21240] {https} PROPFIND request for URI /caldav/users/mydomain.com/myuser/
[07/Dec/2015 15:29:51][21240] {https} User-Agent header: DAViCalClient
[07/Dec/2015 15:29:51][21240] {webdav} PROPFIND /caldav/users/mydomain.com/myuser/ received from remote host='192.168.10.91', user-agent='DAViCalClient'
[07/Dec/2015 15:29:51][21240] {webdav} PropertyRequestReader: found property "getcontentlength" from namespace "DAV:"[07/Dec/2015 15:29:51][21240] {webdav} PropertyRequestReader: found property "getcontenttype" from namespace "DAV:"[07/Dec/2015 15:29:51][21240] {webdav} PropertyRequestReader: found property "resourcetype" from namespace "DAV:"[07/Dec/2015 15:29:51][21240] {webdav} PropertyRequestReader: found property "getetag" from namespace "DAV:"[07/Dec/2015 15:29:51][21240] {webdav} (B)PROPFIND: User myuser@mydomain.com is listing properties of principal: myuser<_at_>mydomain.com
[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontentlength" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontenttype" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getetag" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} (B)PROPFIND: User myuser@mydomain.com is listing properties of principal: myuser<_at_>mydomain.com
[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontentlength" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontenttype" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getetag" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} (B)PROPFIND: User myuser@mydomain.com is listing properties of principal: myuser<_at_>mydomain.com
[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontentlength" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getcontenttype" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {webdav} User: myuser<_at_>mydomain.com refers to an unsupported property: "getetag" of resource: "" using handler: "PrincipalHandler"[07/Dec/2015 15:29:51][21240] {https} Response: HTTP/1.1 207 Multi status
[07/Dec/2015 15:29:51][21240] {https} Request finished in 0.00 s, received 373 bytes, sent 1916 bytes
[07/Dec/2015 15:29:51][21240] {https} Task 202600 handler END

2

Решение

Проблема заключается в том, что вы отправляете запрос по основному пути пользователя, а не в коллекцию календаря или в его домашнюю страницу.

Свойства DAV:getcontentlength, DAV:getcontenttype а также DAV:getetag не нужно определять для ресурсов, которые не поддерживают GET запрос. Как видно из ответа, свойство DAV:resourcetype на самом деле имеет значение, которое говорит, что это DAV:collection и DAV:principal,

Я думаю, что разработчики в Kerio решили вернуть 403 вместо 404 для этих свойств, потому что эти свойства не просто отсутствуют, потому что они еще не установлены, но потому что они не применимы к ресурсу как таковому.

Чтобы найти календари вашего пользователя, вам нужно сначала найти календарь дома. Календари пользователя расположены под его домом календаря.

Чтобы найти календарь дома, просто сделайте PROPFIND для собственности CALDAV:calendar-home-set на том же пути. Это вернет все календарь-дома (обычно это только один), которыми владеет пользователь.

1

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

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