Google CardDAV API addressbook-multiget 返回 400 Bad Request

jan*_*oly 0 google-api google-shared-contacts carddav

我正在尝试通过 Google 的 CardDAV API 从 Google 通讯录中检索所有联系人。
根据CardDAV 开发人员指南,这应该通过发送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>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不断收到(400) Bad Request所有REPORT请求。
我确实在请求中包含了带有 OAuth2 访问令牌的 Authorization 标头和设置为 1 的 Depth 标头,并且我https://www.googleapis.com/carddav/v1/principals/foo@gmail.com/lists/default通过 HTTPS将其发送到。而且我确实可以访问 Developer Console 中授予的 CardDAV API。

有没有人让这个工作和/或有什么我应该做的不同的线索?

Der*_*ade 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>
Run Code Online (Sandbox Code Playgroud)