Google 驱动器 webhook 通知请求 body 为空
Google drive webhook notifications request body is null
我已将 google 驱动器集成到我的应用程序中。为了实现同步,我还按照 link https://developers.google.com/drive/v3/web/push
中的步骤为每个帐户配置了推送通知
下面是 java 代码,用于配置监视帐户的所有文件
String uuid = UUID.randomUUID().toString();
Channel channel = new Channel();
channel.setId(uuid);
channel.setType("web_hook");
channel.setAddress(env.getProperty("webhookUrl"));
StartPageToken pageToken = service.changes().getStartPageToken().execute();
Channel response = service.changes().watch(pageToken.getStartPageToken(), channel).execute();
在实际 google 驱动器中进行更改时,我在上面配置的 webhook url 中收到通知。
但问题在于每一次更改,我得到以下 headers 的相同值,这与 watch 调用的响应相同 & 我没有收到任何正确的请求 headers对应变更或请求body
//Getting request headers
String resourceId = request.getHeader("X-Goog-Resource-ID");
String resourceState = request.getHeader("X-Goog-Resource-State");
String expiration = request.getHeader("X-Goog-Channel-Expiration");
String resourceChanges = request.getHeader("X-Goog-Changed");
String channelId = request.getHeader("X-Goog-Channel-ID");
谁能告诉我如何正确获取通知数据?我做错了什么吗?
这是另一个没有正确答案的问题
我不明白你为什么要查看 webhook 消息的 headers。如 https://developers.google.com/drive/v3/reference/files/watch 所述,您感兴趣的是 body。
获得更改文件的 ID 后,如果您想了解更改内容的详细信息,可以使用修订 https://developers.google.com/drive/v3/web/manage-revisions 提要查看详细信息。
实际上,webhook 通知中没有发送请求正文。因此,一旦更改到达回调 url,就会通过对更改资源 uri
发出获取请求来获取更改
Resource URI : https://www.googleapis.com/drive/v3/changes?includeRemoved=true&pageSize=100&pageToken=895&restrictToMyDrive=false&spaces=drive&alt=json
或者可以使用以下代码以编程方式获取更改
String pageToken = channelInfo.getCurrPageToken();
List<Change> changes = service.changes().list(pageToken)
.execute().getChanges();
Google 推送通知文档本可以清楚地提到这一点,而不是提到请求正文中出现的更改,这是造成混淆的原因
我已将 google 驱动器集成到我的应用程序中。为了实现同步,我还按照 link https://developers.google.com/drive/v3/web/push
中的步骤为每个帐户配置了推送通知下面是 java 代码,用于配置监视帐户的所有文件
String uuid = UUID.randomUUID().toString();
Channel channel = new Channel();
channel.setId(uuid);
channel.setType("web_hook");
channel.setAddress(env.getProperty("webhookUrl"));
StartPageToken pageToken = service.changes().getStartPageToken().execute();
Channel response = service.changes().watch(pageToken.getStartPageToken(), channel).execute();
在实际 google 驱动器中进行更改时,我在上面配置的 webhook url 中收到通知。
但问题在于每一次更改,我得到以下 headers 的相同值,这与 watch 调用的响应相同 & 我没有收到任何正确的请求 headers对应变更或请求body
//Getting request headers
String resourceId = request.getHeader("X-Goog-Resource-ID");
String resourceState = request.getHeader("X-Goog-Resource-State");
String expiration = request.getHeader("X-Goog-Channel-Expiration");
String resourceChanges = request.getHeader("X-Goog-Changed");
String channelId = request.getHeader("X-Goog-Channel-ID");
谁能告诉我如何正确获取通知数据?我做错了什么吗?
这是另一个没有正确答案的问题
我不明白你为什么要查看 webhook 消息的 headers。如 https://developers.google.com/drive/v3/reference/files/watch 所述,您感兴趣的是 body。
获得更改文件的 ID 后,如果您想了解更改内容的详细信息,可以使用修订 https://developers.google.com/drive/v3/web/manage-revisions 提要查看详细信息。
实际上,webhook 通知中没有发送请求正文。因此,一旦更改到达回调 url,就会通过对更改资源 uri
发出获取请求来获取更改Resource URI : https://www.googleapis.com/drive/v3/changes?includeRemoved=true&pageSize=100&pageToken=895&restrictToMyDrive=false&spaces=drive&alt=json
或者可以使用以下代码以编程方式获取更改
String pageToken = channelInfo.getCurrPageToken();
List<Change> changes = service.changes().list(pageToken)
.execute().getChanges();
Google 推送通知文档本可以清楚地提到这一点,而不是提到请求正文中出现的更改,这是造成混淆的原因