【问题标题】:Implementing a Card- and CalDAV Client实施 Card- 和 CalDAV 客户端
【发布时间】:2015-06-18 09:12:21
【问题描述】:

我被要求开发一个可以与我公司的 Card-/CalDAV-Server (Kerio Connect) 通信的 Web 应用程序。在过去的几个小时里,我一直在试图找到一个合适的库,但似乎没有一个可以正常工作且仍在维护的库。 Milton 看起来很棒,但它是用 JAVA 编写的,我和我的同事都没有使用过。

相反,我可能不得不自己编写一些东西,最好是用 PHP 或 JavaScript。我的问题是;如何?我真的很喜欢整个东西是如何基于 http 的,但是除了 RFC 之外,几乎找不到文档。虽然我确实设法让我的一些 curl 请求得到了答复,但其他人在我不明白为什么的情况下失败了:

curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><displayname /></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public

这行得通。我收到一个包含“公共文件夹(domain.tld)”的响应,这就是我所要求的。

curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav"/></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public

另一方面,这个返回 403 - Forbidden。

这两个请求在某些方面可能都是错误的 - 它们只是我设法拼凑起来的。

那么我该如何处理呢?从上到下阅读 RFC 会更好吗?到目前为止,它们还没有那么有用。

编辑

我已阅读 sabre.io 上的两篇文章。他们确实在一定程度上帮助了我。但是,我仍然无法获得实际的联系数据。我已经设法获得了一个包含我们共享地址簿的 UUID 的摘要,但我不知道如何使用这些 UUID。

此外,这两篇文章都没有详细说明事情应该如何工作。例如,首先 CardDAV 相关文章指出 ctag 必须为后续请求存储,然后,仅在几行之后,它提到服务器 可能不支持它根本没有。再往下,我了解到 ctag 应该是一个标签,它可以让我知道服务器上是否发生了某些变化; 这就是 ctag 的目的。每次地址簿中的任何内容发生更改时,ctag 也必须更改。 那么...,当我的服务器不支持它时会发生什么?我怎么知道它是否有效?请求它只会产生 403 - 禁止。

这是我正在使用的请求;

curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" --data "<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/"><d:prop><cs:getctag /></d:prop></d:propfind>" https://domain.tld/carddav/users/domain.tld/.public/

为了获得我们公共通讯簿的上述摘要,我使用了;

curl -X REPORT -u username@domain.tld:password -H "Content-Type: text/xml" --data "<c:addressbook-query xmlns:d='DAV:' xmlns:c='urn:ietf:params:xml:ns:carddav'><d:prop><c:address-data></c:address-data></d:prop></c:addressbook-query>" https://domain.tld/public-contacts/domain.tld/

【问题讨论】:

  • 您的 --data 字符串无效(引号错误)
  • 要获取实际的卡片数据:您是否尝试使用地址簿 uri 上的 PROPFIND 的回复之一尝试 GET

标签: caldav carddav


【解决方案1】:

SabreDAV 网站上有一篇关于如何编写 CalDAV 和 CardDAV 客户端的非常好的文章:Building a CalDAV client

此外,SabreDAV 可能有很多代码,您需要在 PHP 中实现 DAV 客户端。 CalConnect CalDAV website 上列出了其他库实现。

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多