CardDAV получить все контакты из iCloud - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь получить все контакты из учетной записи 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 встречен, неожидан root узел

В чем моя ошибка? Первые два запроса работают и дают ожидаемые результаты, третий - список адресных книг и групп, а четвертый - все VCards.

1 Ответ

0 голосов
/ 19 марта 2020

Для первой проблемы вы не предоставили полный HTTP-запрос, но я подозреваю, что вам не хватает заголовка Depth со значением 1:

Depth: 1

Для второй проблемы, кажется, нет что-то не так с вашей xml полезной нагрузкой. Ваш URL, с другой стороны, кажется неправильным, поскольку в нем по крайней мере отсутствует конечный sla sh, который обозначает коллекцию (некоторые серверы * DAV более строги). Надеемся, что решение первой проблемы позволит вам использовать правильный URL-адрес при выполнении запроса адресной книги.

...