0

我尝试从 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。

4

1 回答 1

0

对于第一个问题,您没有提供整个 HTTP 请求,但我怀疑您缺少值为 1 的 Depth 标头:

Depth: 1

对于第二个问题,您的 xml 有效负载似乎没有任何问题。另一方面,您的 url 似乎不正确,因为它至少缺少表示集合的结尾斜杠(一些 *DAV 服务器对此更加严格)。希望解决第一个问题后,您可以在进行地址簿查询时使用正确的 url。

于 2020-03-19T07:18:34.190 回答