0

Google の CardDAV API を使用して、Google コンタクトからすべての連絡先を取得しようとしています。CardDAV Developer's Guide
に よると、これは. RFC 6352によれば、これは次のようになります。addressbook-multiget REPORT

REPORT https://www.googleapis.com/carddav/v1/principals/foo@gmail.com/lists/default HTTP/1.1
Authorization: Bearer ya29.foo-bar
Depth: 1
Content-Type: text/xml; charset=UTF-8
Host: www.googleapis.com
Content-Length: 204  
<C:addressbook-multiget xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
<D:getetag />
<C:address-data>
<C:prop name="EMAIL"/>
</C:address-data>
</D:prop>
</C:addressbook-multiget>

残念ながら、私は常に(400) Bad RequestすべてのREPORTリクエストを受けています。
リクエストにOAuth2アクセストークンとDepthヘッダーを1に設定したAuthorizationヘッダーを含め、https://www.googleapis.com/carddav/v1/principals/foo@gmail.com/lists/defaultHTTPS経由で送信しています。また、開発者コンソールで CardDAV API へのアクセスが許可されています。

誰かがこれを機能させたり、私が別の方法で何をすべきかの手がかりを持っていますか?

4

2 に答える 2

5

Google CardDav には Filter 要素が必要ですが、一致基準を含めないと、すべてのエントリが返され、hrefs は必要ないことがわかりました。

<?xml version="1.0" encoding="utf-8" ?>
<C:addressbook-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
    <D:getetag />
    <C:address-data />
</D:prop>
<C:filter>
    <C:prop-filter name="FN">
    </C:prop-filter>    
</C:filter>
</C:addressbook-query>
于 2015-04-17T17:17:43.950 に答える
1

一歩足りない。multiget レポートは、リソース URI (href) のリストに基づいて連絡先を取得します。https://www.rfc-editor.org/rfc/rfc6352#section-8.7.1を参照してください。

最初に href のリストを取得するには、次のことができます。

WebDAV 同期は、特に大量の連絡先がある場合に推奨される方法です。

于 2014-05-20T07:05:20.690 に答える