我在尝试从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/
答案 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。