0

我正在尝试通过谷歌的 CardDAV API 从谷歌联系人中检索所有联系人。
根据CardDAV Developer's Guide,这应该通过发送一个addressbook-multiget REPORT. 根据RFC 6352,应该如下所示:

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 访问令牌的 Authorization 标头和设置为 1 的 Depth 标头,并且我https://www.googleapis.com/carddav/v1/principals/foo@gmail.com/lists/default通过 HTTPS 将其发送到。而且我确实可以访问开发者控制台中授予的 CardDAV API。

有没有人得到这个工作和/或知道我应该做些什么不同的事情?

4

2 回答 2

5

Google CardDav 需要一个 Filter 元素,但我发现如果您不包含匹配条件,则将返回所有条目,并且不需要 href:

<?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 (hrefs) 列表检索联系人。见https://www.rfc-editor.org/rfc/rfc6352#section-8.7.1

要首先获取 href 列表,您可以:

WebDAV Sync 是首选方法,尤其是在您拥有大量联系人的情况下。

于 2014-05-20T07:05:20.690 回答