2017-02-18 3 views
1

Я пытаюсь получить доступ к своим календарям iCloud через curl (используя это как тест, прежде чем писать любой код), но получаю несанкционированный доступ ошибок. Неужели кому-нибудь удалась заставить это работать? Я использовал this для извлечения моего ID пользователя и определил идентификатор сервера, отправив себе приглашение на мероприятие.Запросы календаря iCloud

Команда запуска

curl -u <apple email ID> https://<server id>-caldav.icloud.com/<user id>/calendars 

Response

<html><head><title>Unauthorized</title></head><body><h1>Unauthorized</h1><p>You are not authorized to access this resource.</p></body></html> 

Редактировать

Я попытался повторить this запрос с использованием скрипача, но получаю в ответ 502 - соединение не удалось с SecurityException.

ответ

3

Для доступа к календарю или напоминаниям iCloud вы используете протокол IETF под названием CalDAV. Building a CalDAV client - отличное введение о том, как это сделать. С вышеуказанным вы просто бросаете запрос GET в API ...

Использование curl Это трехэтапный процесс, чтобы получить, скажем, имена календаря. Во-первых вам необходимо выяснить URL, представляющей свой счет ICloud (называемый Principal в WebDAV говорит):

curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 0" \ 
    --data "<propfind xmlns='DAV:'><prop><current-user-principal/></prop></propfind>" \ 
    https://caldav.icloud.com/ 

Если вы не можете получить для проверки подлинности, что вы используете неправильные учетные данные, вы возможно, включили двухэтапную аутентификацию для вашей учетной записи iCloud, или прошло 2017-06-15: «С помощью специальных приложений для входа в iCloud с сторонними приложениями потребуется 15 июня». В этом случае вам необходимо установить app-specific password для доступа CalDAV.

Показанный выше локон показывает URL-адрес вашей учетной записи, он выглядит что-то вроде https://caldav.icloud.com/347723822/principal/. Следующий шаг - выяснить, где размещаются ваши календари. Это хранится в счета calendar-home-set имущества принципала и может быть доступ к следующим образом:

curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 0" \ 
    --data "<propfind xmlns='DAV:' xmlns:cd='urn:ietf:params:xml:ns:caldav'><prop><cd:calendar-home-set/></prop></propfind>" \ 
    https://caldav.icloud.com/827267162/principal/ 

Это дает ссылку на кластер фактические календари живет на, это выглядит как https://p22-caldav.icloud.com:443/827161622/calendars. Допустит, вы хотите, чтобы получить имена всех календарей, которые пользователь:

curl -s -X PROPFIND -u "$APPLEID" -H "Depth: 1" \ 
    --data "<propfind xmlns='DAV:'><prop><displayname/></prop></propfind>" \ 
    https://p42-caldav.icloud.com:443/28377271/calendars/ \ 
| grep displayname 

Надеется, что это поможет вам начать работу.

+0

Спасибо за публикацию этого обширного ответа. У меня есть та же проблема, что и у OP, и попробовал вашу первую команду curl с -v (verbose) и получил 401. Я на 100% уверен, что мои учетные данные верны. То же самое можно использовать при входе в icloud.com и работе. Нет 2-FA активен. Любая идея, как отладить это? – Nicolas

+1

Я предполагаю, что это: https://www.google.de/amp/s/9to5mac.ком/2017/05/16/приложение-Specific-пароли-удет-обязательно к знаку-в-к-ICloud-с-сторонними приложениями-с-июня-15-Хереса-хау-to make-them/amp/ – hnh

+0

Вот и все. Благодаря! – Nicolas

Смежные вопросы