iCloud CalDAV über PHP

Ich versuche, eine grundlegende CalDAV-Interaktion für die Verwendung mit Apples iCloud-Kalendern eines bestimmten Kontos zu erstellen. Im Moment erhalte ich die unten gezeigte Antwort:

Precondition Failed
Requested resource has a matching ETag.

Der von mir verwendete Code stammt ursprünglich aushttp://trentrichardson.com/2012/06/22/put-caldav-events-to-calendar-in-php/ und angepasst an das Folgende:

<?php

$account = array(
    'server'=> 'p05',
    'id'    => '######',
    'user'  => 'a****[email protected]',
    'pass'  => '*****'
);


$url = 'https://'.$account['server'].'-caldav.icloud.com/'.$account['id'].'/calendars/work/';
$userpwd = $account['user'] .":". $account['pass'];
$description = 'Test event description';
$summary = 'Test event';
$tstart = gmdate("Ymd\THis\Z", strtotime("-2 days"));
$tend = gmdate("Ymd\THis\Z", strtotime("-2 days"));
$tstamp = gmdate("Ymd\THis\Z");

$body = <<<__EOD
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:$tstamp
DTSTART:$tstart
DTEND:$tend
UID:$uid
DESCRIPTION:$description
LOCATION:Office
SUMMARY:$summary
END:VEVENT
END:VCALENDAR
__EOD;

$headers = array(
    'Content-Type: text/calendar; charset=utf-8',
    'If-None-Match: *', //Possibly this line causing a problem - unsure of what it does?
    'Content-Length: '.strlen($body),
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$res = curl_exec($ch);
curl_close($ch);

print_r($res);

?>

Sie können Ihre Benutzer-ID aus diesem Skript abrufen:https://github.com/muhlba91/icloud/blob/master/PHP/icloud.php

Hat jemand eine Idee, was die Antwort bedeutet oder wie man sie löst? Mir ist klar, dass das Skript sehr einfach ist, aber ich möchte, dass etwas funktioniert, bevor ich es in eine Klasse einordne.

Vielen Dank im Voraus fürirgendein Beratung / Hilfe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage