2014-05-19 8 views
0

Google의 CardDAV API를 통해 Google 주소록에서 모든 연락처를 검색하려고합니다.
CardDAV Developer's Guide에 따르면, 이것은 addressbook-multiget REPORT을 전송하여 수행해야합니다. 어느, RFC 6352에 따라 다음과 같아야합니다Google CardDAV API addressbook-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> 

불행히도, 나는 끊임없이 모든 REPORT 요청에 대한 (400) Bad Request을 얻고있다.
요청에 OAuth2 액세스 토큰 및 깊이 헤더가 1 인 권한 부여 헤더가 포함되어 있으며 HTTPS를 통해 https://www.googleapis.com/carddav/v1/principals/[email protected]/lists/default으로 전송합니다. 개발자 콘솔에서 CardDAV API에 액세스 할 수 있습니다.

누군가가이 작업을하고 있거나 내가 다르게해야 할 일을 알고 있습니까?

답변

1

한 단계가 누락되었습니다. 멀티 키트 보고서는 리소스 uris (hrefs) 목록을 기반으로 연락처를 검색합니다. http://tools.ietf.org/html/rfc6352#section-8.7.1

가 처음에하는 HREF의 목록을 얻으려면을 참조하십시오, 당신은 할 수 있습니다 이 * 같은 URI를 표적으로, 깊이 1과 PROPFIND 요청을 발행 중 (http://tools.ietf.org/html/rfc6578를) (http://tools.ietf.org/html/rfc4918#section-9.1 참조) * 또는 WebDAV를 동기화 보고서를 발간 .

특히 연락처 모음이 많은 경우 WebDAV 동기화를 사용하는 것이 좋습니다.

+0

! 해당 /carddav/v1/principals/[email protected]/lists/default/bar 요소는 내가 누락 된 요소였습니다. 감사. – jansokoly

+0

WebDAV 컬렉션 동기화를 통해 Google CardDAV에서 * 초기 * 동기화 (즉, 비어있는 ''요소)를 사용할 수 있습니까? – 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>