如何从Perl获取CalDAV日历中所有待办事项的列表?

时间:2015-05-13 19:16:25

标签: perl caldav

我有一个CalDAV日历,想要从中取出所有待办事项,然后删除它们。

Cal :: DAV或HTTP :: DAV模块可能都是可行的方法,但它根本不清楚如何做我想做的事情,而没有大量了解CalDAV,我和; m希望避免: - )

1 个答案:

答案 0 :(得分:0)

这是一个使用原始套接字手动连接和发送请​​求的示例 - 我发现使用像lwp这样的库,或者只是因为需要覆盖标头而变得麻烦。

http://sabre.io/dav/building-a-caldav-client/

引用了请求格式
#!/usr/bin/env perl
use strict 'vars';
use warnings;
use Socket;

# initialize host and port
my $host = 'www.example.com';
my $port =  80;

# contact the server
open_tcp(F, $host, $port) 
  or die 'Could not connect to server';

# Send request data
while ( my $request = <DATA> ) {
  print F $request;
}

# Get Response
while ( my $response = <F> ) {
  print "Response:> $response";
}

close(F);

# TCP Helper
sub open_tcp
{
  # get parameters
  my ($FS, $dest, $port) = @_;

  my $proto = getprotobyname('tcp');
  socket($FS, PF_INET, SOCK_STREAM, $proto);
  my $sin = sockaddr_in($port,inet_aton($dest));
  connect($FS,$sin);

  my $old_fh = select($FS); 
  $| = 1; # don't buffer output
  select($old_fh);
}

__DATA__
REPORT /calendars/johndoe/home/ HTTP/1.1
Depth: 1
Prefer: return-minimal
Content-Type: application/xml; charset=utf-8

<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
    <d:prop>
        <d:getetag />
        <c:calendar-data />
    </d:prop>
    <c:filter>
        <c:comp-filter name="VCALENDAR">
            <c:comp-filter name="VTODO" />
        </c:comp-filter>
    </c:filter>
</c:calendar-query>