2016-08-29 16 views
5

Próbowałem podanego tu przykładu.Wyjątek w wątku "główny" com.google.api.client.auth.oauth2.TokenResponseException: 401 Nieautoryzowany

https://developers.google.com/sheets/quickstart/java

Jego daje mi ten wyjątek -

Exception in thread "main" com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized 
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570) 
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) 
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217) 
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868) 
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
at SheetsQuickstart.main(SheetsQuickstart.java:106) 

dałem wszystkie niezbędne uprawnienia do niego.

Używam wersja arkusz api V4

Aktualizacja -

jeśli jestem przechodzącej email id na przykład zamiast user następnie jej daje mi tę odpowiedź.

Zmiany -

public static Credential authorize() throws IOException { 
    // Load client secrets. 
    InputStream in = 
     SheetsQuickstart.class.getResourceAsStream("/client_secret.json"); 
    GoogleClientSecrets clientSecrets = 
     GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

    // Build flow and trigger user authorization request. 
    GoogleAuthorizationCodeFlow flow = 
      new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
      .setDataStoreFactory(DATA_STORE_FACTORY) 
      .setAccessType("offline") 
      .build(); 
    //Changed Part. 
    Credential credential = new AuthorizationCodeInstalledApp(
     flow, new LocalServerReceiver()).authorize("[email protected]"); 
    System.out.println(
      "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
    return credential; 
} 

Response -

Name, Major 
Alexandra, English 
Andrew, Math 
Anna, English 
Becky, Art 
Benjamin, English 
Carl, Art 
Carrie, English 
Dorothy, Math 
Dylan, Math 
Edward, English 
Ellen, Physics 
Fiona, Art 
John, Physics 
Jonathan, Math 
Joseph, English 
Josephine, Math 
Karen, English 
Kevin, Physics 
Lisa, Art 
Mary, Physics 
Maureen, Physics 
Nick, Art 
Olivia, Physics 
Pamela, Math 
Patrick, Art 
Robert, English 
Sean, Physics 
Stacy, Math 
Thomas, Art 
Will, Math 

mam dalszej pomocy z tego linku, aby rozwiązać 400 - Unable to parse range: Class Data!A2:A4"

400 Bad Request Resolution

+1

@pnuts Dzięki za uwagę. Usunąłem ten tag. –

Odpowiedz

3

Po pierwsze, upewnij się postępować właściwie kroki w quickstart guide es zwłaszcza przez włączenie interfejsu API Arkuszy w Konsoli programisty.

Teraz dla TokenResponseException błędu: 401., oparte od tej thread, wspólnych przyczyn tego błędu podczas dokonywania wywołań API z tokenu dostępu są:

  • upłynął token dostępu (najczęściej)

  • Twórca przypadkowo wyłączony API (niezbyt często)

  • Użytkownik cofnie tokena (rzadko)

Niekiedy więcej informacji znajduje się w treści odpowiedzi 4xx HTTP. W kliencie Java, na przykład, należy zalogować się błąd, ponieważ będzie ona pomóc w rozwiązywaniu problemów:

try { 
     // Make your Google API call 
} catch (GoogleJsonResponseException e) { 
     GoogleJsonError error = e.getDetails(); 
     // Print out the message and errors 
} 

mógł zabrać swoje istniejącego kodu i wykonanie połączenia API tu, gdy masz HTTP 4xx i dziennik, który odpowiedź . To zwróci kilka użytecznych informacji.

Jeśli token jest nieprawidłowy, możesz wykonać te kroki.

  1. Usuń token dostępu z bazy danych lub bazy danych.
  2. Użyj tokena odświeżania, aby uzyskać nowy token dostępu (jeśli używasz tokena odświeżania)
  3. Spróbuj ponownie wykonać wywołanie interfejsu API. Jeśli to działa, jesteś dobry!Jeśli nie ...
  4. Sprawdź token dostępu przeciwko tokenInfo API
  5. jeśli to jeszcze nieważny, wykonaj pełne reauth

Aby uzyskać więcej informacji, można sprawdzić to powiązane SO question.

+0

Spróbuj tego przykładu, aby jednoznacznie przeanalizować problem. Sprawdziłem wszystko przed wykonaniem tego przykładu. Właśnie zamieniłem użytkownika na identyfikator e-mail i magię, aby zacząć działać. +1 za dodanie każdej możliwej przyczyny –

Powiązane problemy