我遇到了与这篇文章中描述的相同的问题:
Google Calendar api v3 重新更新问题 https://stackoverflow.com/questions/8574088/google-calendar-api-v3-re-update-issue
也就是说,一旦我创建了一个事件并使用 Google Calendar API (v3) 更新了一次,我就无法再更新该事件了。当我尝试这样做时,我收到 400 - 无效值响应。 (FWIW 我正在 PHP 中工作)。
按照我上面引用的帖子中提供的线索,我尝试使用 etag 来解决该问题(尽管不可否认,我对它们如何工作的理解是有限的)。基本上,在事件更新时,API 在其响应中返回一个 etag,我现在将其保存在数据库中。然后,对于后续 (n > 1) 更新,我从数据库中提取当前 etag 并将其包含在 http 标头中:
Content-Type: application/json
Authorization: OAuth [token]
If-Match: [etag]
以下是“更新条目”标题下的信息:http://code.google.com/apis/gdata/docs/2.0/reference.html#ResourceVersioning http://code.google.com/apis/gdata/docs/2.0/reference.html#ResourceVersioning
旁注:在上面的谷歌参考中,If-Match 标头显示为
If-Match: "S0wCTlpIIip7ImA0X0QI"
etag 周围加双引号。我用双引号将 etag 保存在数据库中,与我在第一次更新响应中收到的 etag 完全相同。使用curl_setopt/HTTPHEADER 添加到标头时是否需要转义引号或其他内容?
尽管实现了这个 etag If-Match 的东西,我仍然得到相同的 400 - 无效值响应。我知道我的请求正文是有效的,因为第一次更新工作正常。后续更新还存在一些其他问题。
非常感谢任何帮助。