Google CALDAV XML-запрос с использованием curl (php)

Я пытаюсь сделать запрос CalDAV XML на сервер Google Caldav с PHP.

Почему-то Google CalDAV очень плохо документирован.

Цель состоит в том, чтобы получить список всех событий, включая данные, относящиеся к событию. (например, Begin, End, Summary, …).
Цель состоит в том, чтобы сделать это максимально эффективно (все данные о событиях в одном запросе).

Я понял, что это может быть достигнуто запросом REPORT.

Я использую код, найденный в эта почта.

Мой точный код:

    $xml= '<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav"><d:prop><c:calendar-data /></d:prop></c:calendar-query>';
$url = "https://apidata.googleusercontent.com/caldav/v2/*email*/events";
$user = "**********@gmail.com";
$pw = "*********";

$data = $this->doRequest($user, $pw, $url, $xml);
print_r($data);

}

public function doRequest($user, $pw, $url, $xml)
{
$c=curl_init();
$url = preg_replace('{^https?://[^/]+}', '', $url);
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_HTTPHEADER, array("Depth: 1", "Content-Type: text/xml; charset='UTF-8'", "Prefer: return-minimal"));
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
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;
}

XML-запрос копируется из SabreDAV вики.

Google возвращает по этому коду «Неизвестная ошибка».
Я знаю, что учетные данные от Google работают, так как я успешно попробовал некоторые запросы, используя встроенные запросы SabreDAV (например, propfind). Но запрос отчета не может быть сгенерирован SabreDAV.

Так что я думаю, что в запросе xml должно быть что-то, что Google Caldav не может обработать должным образом.

Я возился с этим в течение нескольких дней, но я не могу найти правильное решение.

1

Решение

Ну, вы, похоже, используете HTTP Basic Auth, которая не разрешена Google CalDAV API:

https://developers.google.com/google-apps/calendar/caldav/v2/guide#connecting_to_googles_caldav_server

Затем вы не указали, какой URL был целью вашего запроса.

0

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

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