Импорт контактов iCloud.NET (CardDAV)

Я пытался получить контакты iCloud, связанные с моим Apple Id, но по какой-то причине это не работает. Я получаю (404) Not Found ошибку.

Я знаю, что iCloud использует CardDAV и вам нужен определенный URL-адрес для доступа к вашим контактам.

Для клиента CardDAV я использовал следующее: https://github.com/Metric/CardDavNet Для адреса сервера я попробовал несколько URL-адресов (конечно, MYUSERID - это мой реальный идентификатор пользователя):

https://p02-caldav.icloud.com/MYUSERID/carddavhome/card/ https://p02-contacts.icloud.com/MYUSERID/carddavhome/card/

Что я делаю неправильно? Я использую правильные URL сервера или есть что-то еще не так? Я надеюсь, что кто-то может направить меня в правильном направлении.

1 ответ

Решение

Второй упомянутый вами URL выглядит довольно хорошо. Но для надежного получения URL-адреса, на котором размещена ваша адресная книга, вам необходимо запросить свойство addressbook-home-set основной записи вашей учетной записи.

Подобно:

PROPFIND Depth:0 /12345/principal/
<propfind xmlns="DAV:">
  <prop>
    <addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav"/>
  </prop>
</propfind>

и чтобы найти принципала, вы запрашиваете свойство 'Principal-URL', например, на /, с вашим установленным auth:

PROPFIND Depth:0 /
<propfind xmlns="DAV:">
  <prop><principal-URL/></prop>
</propfind>

Вы также можете использовать отладочный прокси-сервер, такой как Charles или Fiddler, чтобы выяснить, что ваша платформа.NET на самом деле отправляет на сервер.

Другие вопросы по тегам