会社の Card-/CalDAV-Server (Kerio Connect) と通信できる Web アプリケーションの開発を依頼されました。適切なライブラリを探すのに何時間も費やしましたが、機能し、まだ維持されているライブラリはないようです。Milton は見栄えがしますが、私も同僚も使用したことがない Java で書かれています。
代わりに、できれば PHP か JavaScript で、自分で何かを書かなければならないでしょう。私の質問は; どうやって?全体が http ベースである点はとても気に入っていますが、RFC を除けば、ドキュメントはほとんど見つかりません。curl-requests のいくつかに応答することができましたが、他のものは理由を理解せずに失敗しました。
curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><displayname /></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public
これは機能します。「Public Folders (domain.tld)」を含む応答を受け取りました。これは、私が要求したものです。
curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav"/></prop></propfind>" http://webmail.domain.tld/carddav/users/domain.tld/.public
一方、これは 403 - Forbidden を返します。
両方の要求は、おそらく何らかの点で間違っています。それらは、単に私がなんとかつなぎ合わせたものです。
では、どうすればこれにアプローチできますか?RFCを上から下まで読むのが最善でしょうか? これまでのところ、それらはそれほど役に立ちませんでした。
編集:
sabre.io で両方の記事を読みました。彼らは私をある程度助けてくれました。ただし、実際の連絡先データはまだ取得できません。共有アドレス帳の UUID を含む概要を取得できましたが、それらの UUID の使用方法がわかりません。
さらに、どちらの記事も、物事がどのように機能するかについてはあまり詳しく説明していません。たとえば、最初に CardDAV 関連の記事で、後続のリクエストのために ctag を保存する必要があると述べており、数行後に、サーバーが ctagをまったくサポートしていない可能性があると述べています。さらに下に進むと、ctag はおそらく、サーバー上で何かが変更されたかどうかを知らせるタグであることがわかりました。これが ctag の目的です。アドレス帳の内容が変更されるたびに、ctag も変更する必要があります。サーバーがサポートしていない場合はどうなりますか? そうであるかどうかはどうすればわかりますか?それを要求すると、単純に 403 - 禁止されます。
これは私が使用しているリクエストです。
curl -X PROPFIND -u username@domain.tld:password -H "Content-Type: text/xml" --data "<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/"><d:prop><cs:getctag /></d:prop></d:propfind>" https://domain.tld/carddav/users/domain.tld/.public/
前述のパブリック アドレス帳の概要を取得するために、次のコードを使用しました。
curl -X REPORT -u username@domain.tld:password -H "Content-Type: text/xml" --data "<c:addressbook-query xmlns:d='DAV:' xmlns:c='urn:ietf:params:xml:ns:carddav'><d:prop><c:address-data></c:address-data></d:prop></c:addressbook-query>" https://domain.tld/public-contacts/domain.tld/