Ich versuche, nach Änderungen in Google Drive zu suchen und 401 Exception zu erhalten. Wenn ich hier suche, finde ich, dass Leute detaillierte Nachrichten haben, warum sie nicht unautorisiert sind, obwohl ich nichts habe.drive.changes(). Watch gibt GoogleJsonResponseException zurück: 401 Nicht autorisiert ohne Nachricht
Hier ist der Code, den ich verwenden:
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);
}
Weitere Informationen:
- Dies ist ein Dienstkonto. Es verfügt über Berechtigungen Besitzer
- ich es von lokalen Computer
- drive.files() bin mit. List() funktioniert
- drive.about(). Get() funktioniert gut
Und die Ausnahme ich erhalte:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized bei com.google.api.client.googleapis.json.GoogleJsonResponseException.from (GoogleJsonResponseException.java : 145) bei com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java:113) bei com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError (AbstractGoogleJsonClientRequest.java: 40) bei com.google.api.client.googleapis.services.AbstractGoogleClientRequest $ 1.interceptResponse (AbstractGoogleClientRequest.java:321) bei com.google.api.client.http.HttpRequest.execute (HttpRequest.java:1065) bei com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed (AbstractGoogleClientRequest.java:419) bei com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed (AbstractGoogleClientRequest.java:352) bei com .google.api.client.googleapis.s ervices.AbstractGoogleClientRequest.execute (AbstractGoogleClientRequest.java:469) bei main.lambda.GoogleDrive2.main (MyClass.java:142)
meine pom.xml Abhängigkeiten:
<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>
Der Code, den Sie verwenden, sieht für mich wie Oauth2 und nicht Dienstkonto aus. Bitte geben Sie Ihren Authentifizierungscode für das Dienstkonto ein. Dies ist eine Analyse, die jedoch als Referenz dienen könnte https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-java – DaImTo
hi @DaImTo Dies ist ein Dienstkonto. Ich habe dies verwendet: ➜ ~ gcloud auth activate-service-account --key-file =/pfad/zu/meine/datei um es lokal zu aktivieren, und danach mit GoogleCredential.getApplicationDefault() .. es dauert diese anmeldedaten – Saandji
Können Sie etwas Einfaches wie eine Dateiliste versuchen? Ich denke, das ist ein Berechtigungsproblem, auf das Ihr Dienstkonto keinen Zugriff hat, um diese Datei anzusehen. – DaImTo