iCloud CalDAV via PHP

Estou tentando criar um script de uma interação básica do CalDAV para uso com os calendários do iCloud da Apple de uma determinada conta. No momento, estou recebendo a resposta mostrada abaixo:

Precondition Failed
Requested resource has a matching ETag.

O código que estou usando foi originalmente retiradohttp://trentrichardson.com/2012/06/22/put-caldav-events-to-calendar-in-php/ e adaptado para o abaixo:

<?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);

?>

Você pode pegar seu ID de usuário deste script:https://github.com/muhlba91/icloud/blob/master/PHP/icloud.php

Alguém tem alguma ideia do que significa a resposta ou como resolvê-la? Eu percebo que o script é muito básico, mas eu gostaria de fazer algo funcionar antes de organizá-lo em uma aula.

Agradecemos antecipadamente porqualquer conselhos / ajuda.

questionAnswers(1)

yourAnswerToTheQuestion