获取GoogleJsonResponseException 401从谷歌日历获取信息时未经授权的异常

时间:2018-05-06 06:23:08

标签: java google-calendar-api

我在尝试从Google日历中获取数据时遇到以下异常请注意我使用的是简单的API密钥: 线程“main”中的异常

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
  "code" : 401,
  "errors" : [ {
    "domain" : "global",
    "location" : "Authorization",
    "locationType" : "header",
    "message" : "Login Required",
    "reason" : "required"
  } ],
  "message" : "Login Required"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
    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)

这是代码:

Calendar calendar = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(),JSON_FACTORY,null).setApplicationName(APPLICATION_NAME)
            .setGoogleClientRequestInitializer(new CalendarRequestInitializer(API_KEY))
            .build();
    List<CalendarListEntry> calendars = calendar.calendarList().list().execute().getItems();// getting exception here

以下是与google相关的依赖关系:

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.23.0</version>
</dependency>
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-calendar</artifactId>
    <version>v3-rev305-1.23.0</version>
</dependency>

API密钥由以下指南创建: https://docs.simplecalendar.io/google-api-key/

2 个答案:

答案 0 :(得分:1)

401 means invalid authorization header.

  

您使用的访问令牌已过期或无效。

return ( ! preg_match("~^([-a-z0-9_\n\r%$#., /])+$~i", $str)) ? FALSE : TRUE;

尝试执行以下操作:

  
      
  • 使用长期刷新令牌获取新的访问令牌。
  •   
  • 如果此操作失败,请引导用户完成OAuth流程,如Authorizing requests with OAuth 2.0
  • 中所述   
  • 如果您在服务帐户中看到此信息,请检查您是否已成功完成service account page中的所有步骤。
  •   

答案 1 :(得分:0)

您正在传递空凭据作为Calendar.Builder中的第三个参数 这就是为什么您要获得401。