drive.changes()。watch返回GoogleJsonResponseException:401未经授权,未显示任何消息

【字号: 日期:2024-03-01浏览:25作者:雯心
如何解决drive.changes()。watch返回GoogleJsonResponseException:401未经授权,未显示任何消息?

花了几个小时并仔细阅读了文档后,我终于找到了问题。

按照推送通知文档(https://developers.google.com/drive/v3/web/push)的规定:

要使用推送通知,您需要做三件事:

注册您的接收URL的域。…

设置您的接收URL或“ Webhook”回调接收器。

这是HTTPS服务器,用于处理资源更改时触发的API通知消息。

为您要观看的每个资源端点设置一个通知通道。

通道指定通知消息的路由信息​​。作为频道设置的一部分,您可以标识要在其中接收通知的特定URL。每当频道的资源发生变化时,DriveAPI都会向该URL发送一条通知消息,作为POST请求。

这意味着您应该拥有一个域,并且应该先在Google上进行确认,然后才能使用watch API。

附GoogleJsonResponseException: 401Unauthorized言:在这种情况下,我仍然认为回应是荒谬的,但希望它能帮助其他面临相同问题的人。

解决方法

我正在尝试监视Google云端硬盘中的更改,并收到401异常。在这里搜索时,我发现人们有详细的消息,尽管我一无所有,但为什么他们未被未经授权。

这是我使用的代码:

public static void main(String[] args) { try {httpTransport = GoogleNetHttpTransport.newTrustedTransport();dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);// authorizationGoogleCredential credential = GoogleCredential.getApplicationDefault().createScoped(DriveScopes.all());boolean refreshed = credential.refreshToken();// set up the global Drive instancedrive = new Drive.Builder(httpTransport,JSON_FACTORY,credential).setApplicationName(APPLICATION_NAME).build();Channel channel = new Channel();channel.setId(UUID.randomUUID().toString());channel.setType('web_hook');//my ip herechannel.setAddress('https://com.example:');StartPageToken pageToken = drive.changes().getStartPageToken().execute();System.out.println(pageToken.getStartPageToken());Channel changesChannel = drive.changes().watch(pageToken.getStartPageToken(),channel).execute();System.out.println(changesChannel.getExpiration());return; } catch (IOException e) {System.err.println(e.getMessage());e.printStackTrace(); } catch (Throwable t) {t.printStackTrace(); } System.exit(1);}

更多信息:

这是一个服务帐户。它具有所有者权限我正在从本地计算机使用它drive.files()。list()工作正常drive.about()。get()正常工作

而且我得到的例外是:

com.google.api.client.googleapis.json.GoogleJsonResponseException:401在com.google.api.client.googleapis上的com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)未经授权。com.google.api.client.googleapis上com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)上的services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)。services.AbstractGoogleClientRequest $1.interceptResponse(AbstractGoogleClientRequest.java:321)在com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419),位于com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)的com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352).lambda.GoogleDrive2.main(MyClass.java:142)

我的pom.xml依赖项:

<dependency><groupId>com.google.api-client</groupId><artifactId>google-api-client</artifactId><version>1.20.0</version> </dependency> <dependency><groupId>com.google.oauth-client</groupId><artifactId>google-oauth-client</artifactId><version>1.22.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client-extensions --> <dependency><groupId>com.google.api-client</groupId><artifactId>google-api-client-extensions</artifactId><version>1.6.0-beta</version> </dependency> <dependency><groupId>com.google.oauth-client</groupId><artifactId>google-oauth-client-jetty</artifactId><version>1.22.0</version> </dependency> <dependency><groupId>com.google.apis</groupId><artifactId>google-api-services-drive</artifactId><version>v3-rev70-1.22.0</version> </dependency>

相关文章: