在与Google的CardDav服务器进行初始同步时,我正在使用sync-collection方法执行REPORT请求。在此请求中,我从初始同步开始传递空的sync-token。 这是根据RFC 6578(https://tools.ietf.org/html/rfc6578#section-3.8)。
请求正文如下所示:
<?xml version="1.0" ?>
<D:sync-collection xmlns:D="DAV:">
<D:sync-token/>
<D:prop>
<D:getetag/>
</D:prop>
</D:sync-collection>
我期待与所有联系人的etag进行多状态回复。 但是,谷歌正在返回HTTP错误400。
如果我做错了什么可以吗?
答案 0 :(得分:0)
根据https://tools.ietf.org/html/rfc6578#section-6.1
,您的请求缺少同步级元素 <!ELEMENT sync-collection (sync-token, sync-level, limit?, prop)>
Google API并不完全清楚它们是否支持空同步令牌。
初始同步后,客户端应用程序必须切换到此操作模式。
和
客户端程序使用通讯簿上的sync-token PROPFIND请求来获取表示其当前状态的同步令牌。客户端应用程序必须存储此值并发出定期同步收集REPORT请求,以确定自上次发出的同步令牌以来的更改。颁发的令牌有效期为29天,REPORT响应将包含一个新的同步令牌。
所以他们很有可能因为这个原因拒绝了请求。 如果是这种情况,可以使用深度执行PROPFIND:1要求同步令牌属性以及getetag,然后根据检索到的同步令牌属性执行同步请求。