Google CardDAV API地址簿 - multiget返回400错误请求
我试图通过Google的CardDAV API从Google Contacts中检索所有联系人。
根据CardDAV Developer's Guide,这应该通过发送addressbook-multiget REPORT
完成。其中,根据RFC 6352,应该是这样的:Google CardDAV API地址簿 - multiget返回400错误请求
REPORT https://www.googleapis.com/carddav/v1/principals/[email protected]/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访问令牌和深度标头设置为1的授权标头,并且我通过HTTPS将它发送到https://www.googleapis.com/carddav/v1/principals/[email protected]/lists/default
。而且我可以访问Developer Console中授予的CardDAV API。
有没有人得到这个工作和/或有我应该做的不同的线索?
您错过了一个步骤。 multiget报告将根据资源uris(hrefs)列表检索联系人。见http://tools.ietf.org/html/rfc6352#section-8.7.1
要获得在首位HREF中的列表中,您可以: *或者签发与其深度1 PROPFIND请求,靶向同一个URI(见http://tools.ietf.org/html/rfc4918#section-9.1) *或发出一个WebDAV同步报告(http://tools.ietf.org/html/rfc6578) 。
WebDAV同步是首选的方法,尤其是如果您有大量联系人。
谷歌的CardDAV需要过滤的元素,但我发现,如果你不包括匹配标准,所有参赛作品将被退回,并且不需要的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>
没错!适当的 /carddav/v1/principals/[email protected]/lists/default/bar 元素,是我错过了。谢谢。 –
jansokoly
您是否设法通过WebDAV收集同步在Google CardDAV上使用* initial * sync(即空的' '元素)? –
dkarp