Клиент CalDav для iCloud: ошибка MKCOL с ошибкой предварительного условия 412

Мне нужна помощь. Я реализовал клиент CalDav в нашей системе, и он работал как часы. Теперь у меня возникли проблемы с созданием новых календарей в iCloud. Может быть, кто-то из вас знает, как я могу это исправить.

В настоящее время я получаю ошибку 412.

Заголовки:

"Depth: 1"
"Content-Type: application/xml; charset=UTF-8"
"User-Agent: DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)"`

Запрос:

`MKCOL`

Тело:

    <D:mkcol xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"> 
    <D:set>
      <D:prop>
        <D:resourcetype>
          <D:collection/>
          <C:calendar-collection/>
       </D:resourcetype>"
       <D:displayname>some name</D:displayname>
      </D:prop>
    </D:set>
    </D:mkcol>`

URL-адрес:

https://caldav.icloud.com/1722222111/calendars/64DA8FE9D95A40E4B83A45B47DEC6C53/

URL — это мой принцип (конечно, я изменил его) и случайно сгенерированный UUID для ресурса календаря.

Может быть, кто-то замечает ошибки? Раньше работал нормально 6 месяцев назад.

Большое спасибо!


person Klerafukan    schedule 14.11.2018    source источник
comment
Кажется, это работает, если я использую URI: https://caldav.icloud.com/1722222111/calendars/ Однако разрешена только одна коллекция, и я хочу создать как минимум три календаря. Я не знаю, как получить доступ или создать новый URI для этих календарей. Как я уже упоминал, раньше он работал с генерацией UUID и просто объединял UUID с URI календаря.   -  person Klerafukan    schedule 15.11.2018


Ответы (2)


Несмотря на то, что в конечной точке caldav.icloud.com, похоже, есть ошибка сопоставления (зарегистрируйте ее как Radar 46258347, если хотите), вы не должны нажимать URL-адрес /calendars в этой конечной точке в первую очередь.

Вы используете только caldav.icloud.com для обнаружения основного ресурса (представляющего пользователя/учетную запись). Он содержит фактический раздел, на котором размещен сервер caldav для вашей учетной записи, он выглядит так:

https://pXX-caldav.icloud.com/asdfjasdjkjfd/calendars/

Эти конечные точки все еще работают нормально (только что попробовали).

Так как же перейти от caldav.icloud.com к реальному серверу CalDAV? Вам необходимо получить свойство calendar-home-set участника.

Весь процесс описан в CalDAV RFC или в этом замечательном руководстве: http://sabre.io/dav/building-a-caldav-client/#discovery.

person hnh    schedule 26.11.2018
comment
Хорошая точка зрения. Я сделаю это. Пока что я не могу выполнить запрос PROPFIND на caldav.icloud.com/principle. . Он всегда возвращает 404 not foud. Но я разберусь. - person Klerafukan; 30.11.2018
comment
Хорошо, только последнее утверждение, чтобы закончить это: я реализовал подход обнаружения и обходной путь для ошибки. Все работает нормально! Выражаю огромную благодарность ребятам!!! до - person Klerafukan; 05.12.2018
comment
Не могли бы вы тогда отметить этот ответ как единственный? Принятый может работать, но это несоответствующий хак, который сломается, как только его исправят... - person hnh; 05.12.2018
comment
Я отметил второй ответ. Потому что я согласен, что это лучшая практика. Однако мою проблему решает решение 1. Я надеюсь, что Apple скоро исправит эту ошибку, и я смогу удалить свой обходной путь. - person Klerafukan; 06.12.2018
comment
Если требуется взлом, похоже, у нас пока нет правильного ответа. Когда я делаю MKCALENDAR в Calendar.app и просматриваю трассировку Чарльза, он делает правильный запрос и завершается успешно. Теперь это может быть связано с обнюхиванием пользовательского агента, не уверен. ???? - person hnh; 06.12.2018

Если вы используете https://pXX-caldav.icloud.com/123456789/calendars/new-calendar-name-or-href/ для отправки MKCOL запроса, вы получите статус 201 CREATED, а href вашей новой коллекции будет pXX-caldav.icloud.com/123456789/calendars/new-calendar-name-or-href/

person teymourlouie    schedule 18.11.2018
comment
Я мог бы поцеловать тебя прямо сейчас!! Большое спасибо. Есть ли способ, который где-то задокументирован? - person Klerafukan; 19.11.2018
comment
К сожалению, самая большая проблема с iCloud — это отсутствие документации. Я нашел ответ путем проб и ошибок. - person teymourlouie; 20.11.2018
comment
Однако это была бы прямая ошибка, и ее следует отредактировать с помощью Radar: radar.apple.com - person hnh; 27.11.2018
comment
К сожалению, самая большая проблема с iCloud — это отсутствие документации — протокол CalDAV является надлежащим стандартом с полным RFC и большим количеством документации! ???? - person hnh; 27.11.2018
comment
Спасибо за ваш комментарий, на самом деле URL-адрес, который я указал в своем комментарии, был неверным, и я исправил его. как я уже сказал, я должен отправить запрос MKCOL на pXX- caldav.icloud.com/123456789/new-calendar-name-or-href, чтобы создать новый календарь по адресу pXX-caldav.icloud.com/123456789/calendars/. - person teymourlouie; 28.11.2018
comment
@hnh несколько дней назад Apple изменила свою реализацию (исправила ошибку) и создала новый календарь через pXX-caldav.icloud.com/123456789/new-calendar-name-or-href больше не работает. это должно быть pXX-caldav.icloud.com/ 123456789/календари/ ;) - person teymourlouie; 18.06.2020