J'essaie de surveiller les modifications dans Google Drive et d'obtenir l'exception 401. En cherchant ici, j'ai trouvé que les gens ont des messages détaillés, pourquoi ils ne sont pas non autorisés bien que je n'ai rien.drive.changes(). Watch returns GoogleJsonResponseException: 401 Non autorisé sans aucun message
Voici le code i utiliser:
public static void main(String[] args) {
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
// authorization
GoogleCredential credential = GoogleCredential.getApplicationDefault()
.createScoped(DriveScopes.all());
boolean refreshed = credential.refreshToken();
// set up the global Drive instance
drive = 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 here
channel.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);
}
Plus d'infos:
- Ceci est un compte de service. Il dispose des autorisations de propriétaire
- Je l'utilise depuis l'ordinateur local
- drive.files(). Liste() fonctionne très bien
- drive.about(). Get() fonctionne très bien
Et l'exception que je reçois:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 non autorisé à com.google.api.client.googleapis.json.GoogleJsonResponseException.from (GoogleJsonResponseException.java : 145) à com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java:113) à com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java: 40) à com.google.api.client.googleapis.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.executeUnparsed (AbstractGoogleClientRequest.java:352) à com .google.api.client.googleapis.s ervices.AbstractGoogleClientRequest.execute (AbstractGoogleClientRequest.java:469) à main.lambda.GoogleDrive2.main (MyClass.java:142)
mes dépendances 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>
Le code que vous utilisez ressemble à Oauth2 et ne compte pas de service pour moi. Veuillez inclure votre code d'autorisation pour le compte de service. Il s'agit d'un outil d'analyse, mais il peut être utile en tant que référence https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-java – DaImTo
hi @DaImTo Il s'agit d'un compte de service. J'ai utilisé ceci: ➜ ~ gcloud auth activer-service-compte --key-fichier =/chemin/vers/mon/fichier pour l'activer localement, et après cela avec GoogleCredential.getApplicationDefault() .. il prend ces informations d'identification – Saandji
Pouvez-vous essayer quelque chose de simple comme une liste de fichiers. Je pense que c'est un problème d'autorisations que votre compte de service n'a pas accès à regarder ce fichier. – DaImTo