2014-05-19 136 views
0

我試圖通過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。

有沒有人得到這個工作和/或有我應該做的不同的線索?

回答

1

您錯過了一個步驟。 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同步是首選的方法,尤其是如果您有大量聯繫人。

+0

沒錯!適當的 /carddav/v1/principals/[email protected]/lists/default/bar元素,是我錯過了。謝謝。 – jansokoly

+0

您是否設法通過WebDAV收集同步在Google CardDAV上使用* initial * sync(即空的''元素)? – dkarp

2

谷歌的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> 
相關問題