当前位置: 首页 > 知识库问答 >
问题:

线程“main”中的异常 com.google.api.client.auth.oauth2.TokenResponseException: 401 未经授权

鱼安然
2023-03-14

我尝试了这里给出的例子。

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

它给了我这个例外-

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)

我已经给了它所有必要的许可。

我使用的是表单api版本v4

更新-

如果我在示例中传递电子邮件ID而不是用户,那么它会给我这个响应。

变化-

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

我从这个链接得到了进一步的帮助来解决< code>400 -无法解析范围:类数据!A2:A4"

400错误请求解析

共有1个答案

巫化
2023-03-14

首先,确保正确遵循快速入门指南中的步骤,尤其是在开发人员控制台中启用Sheets API。

现在,对于错误TokenResponseException:401 Unauthorized,基于此线程,当使用访问令牌进行API调用时,该错误的常见原因是:

> < li>

过期的访问令牌(最常见)

开发人员意外禁用了API(不常见)

用户撤销令牌(罕见)

有时,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 调用并记录该响应。这将返回一些有用的信息。

如果令牌无效,则可以执行以下步骤。

  1. 从数据存储或数据库中删除访问令牌
  2. 使用刷新令牌获取新的访问令牌(如果您正在使用刷新令牌)。
  3. 请尝试再次进行API调用。如果成功了,你很好!如果不是…
  4. 对照tokenInfo API检查访问令牌。
  5. 如果它仍然无效,请进行完全重新验证

有关更多信息,您可以查看此相关的SO问题。

 类似资料:
  • 我想使用爪哇谷歌驱动器API。我尝试了这段代码: 但是我得到了这个错误: 我使用以下配置: 你能告诉我怎么解决这个问题吗?

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 我试图通过访问Google Admin SDK API来提取我域中的用户。但是,我被赋予了401未经授权的异常。下面的代码是我的设置类,其中包含我调用API的方法。 下面的代码是我用来从我的域中提取用户的测试用例: 最后,这是我面临的一个例外。 任何帮助都将不胜感激!!!

  • 我想使用服务帐户实现谷歌表API请求。我创建了这个代码: 但是我得到了这个错误: com.google.api.client.auth.oauth2.TokenResponseException: 401 未经授权 在这个方法中 你知道我该如何解决这个问题吗?

  • 问题内容: 每当我运行此命令时,该函数就可以正常使用。当我选择洞穴时,消息会每隔2秒弹出一次,然后当它越过该部分时,就会出现错误: 我已经尝试过和,并且在该方法中使用时,出现了很多错误。当我在方法中使用时,它不接受我的输入。 当我在该方法中使用时,它不接受我的字符串输入,而直接进入另一个游戏,但是布尔值返回并且它无限地发送垃圾邮件“ Which Cave …”。 我已经阅读了错误报告,以及类似问题

  • 问题内容: 我正在开发一个访问数据库的项目,但是我遇到了一些问题。我尝试使用hibernate3.2和4.52,但是它不起作用。 例外是在这行代码中 问题答案: 您需要在类路径中检查类org.apache.log4j.Level的冲突版本并进行解决。版本1.2.12或更高版本的log4j jar中提供了TRACE级别。