【问题标题】:Adding new events to iCal with PUT request from PHP client?使用来自 PHP 客户端的 PUT 请求向 iCal 添加新事件?
【发布时间】:2012-05-27 13:49:47
【问题描述】:

我正在尝试将 PHP 编写的日历与 Kerio Connect 日历(iCal)同步。 我在连接日历和获取事件方面没有问题。 但是当我尝试 PUT 任何新事件时,似乎添加了空事件,例如:

我的要求:

标题: PUT /calendars/localhost/marcin/Calendar HTTP/1.1 授权:基本 bWFyY2luOnJob21hbg== 主机:本地主机:1212 如果无匹配:* 内容类型:text/icalendar 内容长度:367

请求: 开始:VCALENDAR 产品:-//Kerio Technologies//Kerio Connect//EN 方法:发布 版本:2.0 X-版本-KMS:6.2.0 开始:事件 DTSTART;值=日期:20120528T163000 DTEND;值=日期:20120528T170000 序列:0 摘要:测试事件 等级:公共优先级:5 传输:不透明 X-MICROSOFT-CDO-BUSYSTATUS:BUSY X-标签:0 结束:事件 END:VCALENDAR

回应: HTTP/1.1 201 创建 允许:OPTIONS、TRACE、GET、HEAD、DELETE、PUT、COPY、MOVE、PROPFIND、PROPPATCH、SEARCH、SUBSCRIBE、UNSUBSCRIBE、POLL、BDELETE、BCOPY、BMOVE、BPROPPATCH、BPROPFIND、LOCK、UNLO​​CK 连接:关闭 内容长度:0 内容类型:文本/html 日期:2012 年 5 月 27 日星期日 13:33:04 GMT ETag:1f353abd967f4700b8dc18f4d4775ff30000003400000001 位置:/日历/本地主机/marcin/日历/ Repl-UID:资源标签:

无论我提出请求的日期/主题是什么,创建的事件总是如下所示: 学科: 日期:2012 年 5 月 27 日星期日 15:33:04 +0200 内容类型:文本/日历;组件="事件";方法="发布";字符集="utf-8" 内容传输编码:8bit

开始:VCALENDAR 产品:-//Kerio Technologies//Kerio Connect//EN 方法:发布 版本:2.0 X-版本-KMS:6.2.0 开始:事件 DTSTAMP:20120527T133304Z UID:10a69ad8-07f1-4831-a015-4de3dac78351 传输:不透明 X-MICROSOFT-CDO-BUSYSTATUS:BUSY 结束:事件 END:VCALENDAR

所以没有主题,也没有日期(DTSTART,DTEND); 我试图发送空请求: 开始:VCALENDAR 开始:事件 结束:事件 END:VCALENDAR

结果是一样的。

我是 calDAV 的新手,最近几天我一直在努力解决这个问题。 如果有人可以帮助我并告诉我我做错了什么,那就太棒了。

最好的问候 马丁

【问题讨论】:

    标签: request icalendar put caldav


    【解决方案1】:

    我也有确切的问题。我推送事件,但 kerio 没有显示主题或日期。这是我发现的工作(我只能让 curl 工作,没有 fsockopen 运气):

    $uid = "test-12345"; // setting this to an existing uid updates event, a new uid adds event
    $url = $account['uri'].'/'.$uid.'.ics'; //http://mail.domain.com/calendars/DOMAIN/USER/Calendar/'.$uid.'.ics'
    $userpwd = $account['user'] .":". $account['pass'];
    $description = 'My event description here';
    $summary = 'My event title 1';
    $tstart = '201206015T000000Z';
    $tend = '20120616T000000Z';
    $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: *',
        'Expect: ',
        '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);
    curl_exec($ch);
    curl_close($ch);
    

    【讨论】:

    • 我终于能够让 fsockopen 工作而不是 curl。问题是发送的内容类型标头。它不喜欢文本/日历。尝试改用文本/日历,这对我有用。
    • 您好,您能帮我解决一下我的情况吗? stackoverflow.com/questions/50720196/…
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2016-06-15
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多