java - 线程 "main"com.google.api.client.auth.oauth2.TokenResponseException : 401 Unauthorized 中的异常

标签 java google-sheets-api

我试过这里给出的例子。

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

它给了我这个异常(exception) -

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)

我已授予它所有必要的权限。

我正在使用 sheet api 版本 v4

Update -

如果我在示例中传递 email id 而不是 user 那么它会给我这个响应。

变化-

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("test@gmail.com");
    System.out.println(
            "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
    return credential;
}

响应 -

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

我从这个链接得到了进一步的帮助来解决 400 - Unable to parse range: Class Data!A2:A4"

400 Bad Request Resolution

最佳答案

首先,请确保您正确遵循 quickstart guide 中的步骤特别是在您的开发者控制台中启用 Sheets API。

现在针对 错误 TokenResponseException:401 未授权,基于此 thread ,使用访问 token 进行 API 调用时出现该错误的常见原因是:

  • 过期的访问 token (最常见)

  • 开发人员不小心禁用了 API(不常见)

  • 用户撤销 token (罕见)

有时,更多解释存在于 HTTP 4xx 的响应正文中。例如,在 Java 客户端中,您应该记录错误,因为它有助于故障排除:

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

每当您收到 HTTP 4xx 并记录该响应时,您都可以使用现有代码并在此处进行 API 调用。这将返回一些有用的信息。

如果 token 无效,您可以按照以下步骤操作。

  1. 从您的数据存储区或数据库中删除访问 token 。
  2. 使用刷新 token 获取新的访问 token (如果您使用的是刷新 token )
  3. 再次尝试调用 API。如果它有效,你很好!如果不是……
  4. 根据 tokenInfo API 检查访问 token
  5. 如果仍然无效,则进行全面重新授权

更多信息可以查看这个相关的SO question .

关于java - 线程 "main"com.google.api.client.auth.oauth2.TokenResponseException : 401 Unauthorized 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39201216/

相关文章:

java - 循环链表中索引处的元素

java - 使用 Java 连接到 DB2 zOS 数据库时出错

php - 使用 PHP 附加数据时,如何通过 API 在 Google 表格中设置复选框?

python - 使用 python/pandas 将数据框写入谷歌表格

java - 如何在 Android 上识别 Google Sheets API 中的每个值

java - 如何修复内存泄漏?

java - 如何在tomcat中调试war文件

Java 类型映射到 Java SQL 类型 Util

javascript - 从应用程序脚本附加菜单打开一个新窗口

google-sheets - 使用 apikey 从 Google Sheets API 获取 403