gpt4 book ai didi

java - BigQuery 和 OAuth2

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:26 25 4
gpt4 key购买 nike

我正在尝试使用 Service Account 访问 Google BigQuery方法。我的代码如下:

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

private static final JsonFactory JSON_FACTORY = new JacksonFactory();

GoogleCredential credentials = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("XXXXX@developer.gserviceaccount.com")
.setServiceAccountScopes(BigqueryScopes.BIGQUERY)
.setServiceAccountPrivateKeyFromP12File(
new File("PATH-TO-privatekey.p12"))
.build();
Bigquery bigquery = Bigquery.builder(HTTP_TRANSPORT, JSON_FACTORY).setHttpRequestInitializer(credentials)
.build();
com.google.api.services.bigquery.Bigquery.Datasets.List datasetRequest = bigquery.datasets().list(
"PROJECT_ID");

DatasetList datasetList = datasetRequest.execute();
if (datasetList.getDatasets() != null) {
java.util.List<Datasets> datasets = datasetList.getDatasets();
System.out.println("Available datasets\n----------------");
for (Datasets dataset : datasets) {
System.out.format("%s\n", dataset.getDatasetReference().getDatasetId());
}
}

但它抛出以下异常:

Exception in thread "main"  com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
"code" : 401,
"errors" : [ {
"domain" : "global",
"location" : "Authorization",
"locationType" : "header",
"message" : "Authorization required",
"reason" : "required"
} ],
"message" : "Authorization required"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:159)
at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187)
at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115)
at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112)
at com.google.api.services.bigquery.Bigquery$Datasets$List.execute(Bigquery.java:979)

异常在这一行被触发:

  DatasetList datasetList = datasetRequest.execute();

我从 Google 的 API 控制台的第二行获取帐户 ID,如下所示:

    Client ID:  XXXXX.apps.googleusercontent.com
Email address: XXXXX@developer.gserviceaccount.com

我错过了什么?

最佳答案

Eureka ! Eric 和 Michael 的代码都运行良好。

问题中发布的错误可以通过错误地设置客户端计算机上的时间来重现。幸运的是,可以通过在客户端机器上正确设置时间来解决

注意:为了它的值(value),我使用“Internet 时间设置”对话框中的“立即更新”按钮同步了 Windows 7 机器上的时间。我认为这应该是非常安全的......但我想我击败了系统。它纠正了秒数,但让机器关闭了整整一分钟。此后 BigQuery 调用失败。手动修改时间成功。

关于java - BigQuery 和 OAuth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com