CardDAV 从 iCloud 获取所有联系人
Posted
技术标签:
【中文标题】CardDAV 从 iCloud 获取所有联系人【英文标题】:CardDAV get all contacts from iCloud 【发布时间】:2020-03-17 10:44:44 【问题描述】:我尝试从 iCloud 帐户获取所有联系人...
首先我运行:
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:">
<d:prop>
<d:current-user-principal/>
</d:prop>
</d:propfind>
然后我得到 /xxxxxxxxxxx/carddavhome/ 并运行:
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop>
<card:addressbook-home-set/>
</d:prop>
</d:propfind>
这给了我 URL https://pXX-contacts.icloud.com:443/xxxxxxxxxxx/carddavhome/ 然后我向这个 URL 发送以下请求:
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop>
<d:displayname/>
<d:resourcetype/>
</d:prop>
</d:propfind>
我得到:
<?xml version="1.0" encoding="UTF-8"?>
<multistatus xmlns="DAV:">
<response>
<href>/xxxxxxxxxxx/carddavhome/</href>
<propstat>
<prop>
<resourcetype>
<collection/>
</resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<displayname/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>
如果我尝试将其运行到 URL https://pXX-contacts.icloud.com:443/xxxxxxxxxxx/carddavhome/contacts
<?xml version="1.0" encoding="UTF-8"?>
<card:addressbook-query xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop>
<d:getetag/>
<card:address-data/>
</d:prop>
</card:addressbook-query>
我得到:遇到格式不正确的 XML,意外的根节点
我的错误是什么?前 2 个查询有效并给了我预期的结果,第 3 个应该给我地址簿和组的列表,第 4 个应该给我所有的 VCard。
【问题讨论】:
【参考方案1】:对于第一个问题,您没有提供整个 HTTP 请求,但我怀疑您缺少值为 1 的 Depth 标头:
Depth: 1
对于第二个问题,您的 xml 有效负载似乎没有任何问题。另一方面,您的 url 似乎不正确,因为它至少缺少表示集合的结尾斜杠(一些 *DAV 服务器对此更加严格)。希望解决第一个问题后,您可以在查询通讯录时使用正确的 url。
【讨论】:
以上是关于CardDAV 从 iCloud 获取所有联系人的主要内容,如果未能解决你的问题,请参考以下文章