java com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32476746/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
提问by Sandeep Chatterjee
I am trying to upload a text file to my Google Drive account. No matter what, I always encounter an com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
我正在尝试将文本文件上传到我的 Google Drive 帐户。不管怎样,我总是遇到一个com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
Stacktrace:
堆栈跟踪:
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Forbidden",
"reason" : "forbidden"
} ],
"message" : "Forbidden"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
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.executeUnparsed(AbstractGoogleClientRequest.java:423)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at chatterjee.sandeep.javabase.miscellaneous.DriveCommandLine.main(DriveCommandLine.java:69)
Here is line 69 of DriveCommandLine.java
这是第 69 行 DriveCommandLine.java
File file = service.files().insert(body, mediaContent).execute();
Complete Code:
完整代码:
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.Hymanson2.HymansonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class DriveCommandLine {
private static String CLIENT_ID = "CLIENT_ID";
private static String CLIENT_SECRET = "CLIENT_SECRET";
private static String REDIRECT_URI = "REDIRECT_URI";
public static void main(String[] args) throws IOException {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new HymansonFactory();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET,
Arrays.asList(DriveScopes.DRIVE_FILE)).setAccessType("online")
.setApprovalPrompt("auto").build();
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI)
.build();
System.out
.println("Please open the following URL in your browser then type the authorization code:");
System.out.println(" " + url);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
GoogleTokenResponse response = flow.newTokenRequest(code)
.setRedirectUri(REDIRECT_URI).execute();
GoogleCredential credential = new GoogleCredential()
.setFromTokenResponse(response);
// Create a new authorized API client
Drive service = new Drive.Builder(httpTransport, jsonFactory,
credential).build();
// Insert a file
File body = new File();
body.setTitle("My document");
body.setDescription("A test document");
body.setMimeType("text/plain");
java.io.File fileContent = new java.io.File(
"/path/to/TextFile.txt");
FileContent mediaContent = new FileContent("text/plain", fileContent);
File file = service.files().insert(body, mediaContent).execute();
System.out.println("File ID: " + file.getId());
}
}
I have the following jars in my project build path:
我的项目构建路径中有以下 jars:
commons-logging-1.1.1.jar
google-api-client-1.18.0-rc.jar
google-api-client-android-1.18.0-rc.jar
google-api-client-appengine-1.18.0-rc.jar
google-api-client-gson-1.18.0-rc.jar
google-api-client-Hymanson2-1.18.0-rc.jar
google-api-client-java6-1.18.0-rc.jar
google-api-client-servlet-1.18.0-rc.jar
google-api-services-drive-v1-rev123-1.18.0-rc.jar
google-http-client-1.18.0-rc.jar
google-http-client-android-1.18.0-rc.jar
google-http-client-appengine-1.18.0-rc.jar
google-http-client-gson-1.18.0-rc.jar
google-http-client-Hymanson2-1.18.0-rc.jar
google-http-client-jdo-1.18.0-rc.jar
google-oauth-client-1.18.0-rc.jar
google-oauth-client-appengine-1.18.0-rc.jar
google-oauth-client-java6-1.18.0-rc.jar
google-oauth-client-jetty-1.18.0-rc.jar
google-oauth-client-servlet-1.18.0-rc.jar
gson-2.1.jar
httpclient-4.0.3.jar
httpcore-4.0.1_1.jar
Hymanson-core-2.1.3.jar
jdo2-api-2.3-eb.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
transaction-api-1.1-rev-1.jar
At present I have two projects set up with Drive API enabled.
目前我设置了两个启用 Drive API 的项目。
Now where do I properly set up the permissions to resolve this issue?
现在我应该在哪里正确设置权限来解决这个问题?
Also, what am I doing wrong here?
另外,我在这里做错了什么?
回答by Suraj Muraleedharan
I had the same issue, I did the following change and it resolved the issue
我遇到了同样的问题,我做了以下更改并解决了问题
1) Added SheetsScopes.DRIVE to the scopes to be given in authorize()
1) 将 SheetsScopes.DRIVE 添加到要在 authorize() 中给出的范围
private static final List<String> SCOPES =
Arrays.asList(SheetsScopes.SPREADSHEETS,SheetsScopes.DRIVE);
2) Created a new directory, so that next time I run it, it will authenticate and save the credential to the newly created directory
2) 创建了一个新目录,以便我下次运行它时,它会进行身份验证并将凭据保存到新创建的目录中
private static final java.io.File DATA_STORE_DIR = new java.io.File(
System.getProperty("user.home"), ".credentials/2/sheets.googleapis.com-java-quickstart.json");
回答by Vitali Rahin
回答by Yster
After a long time searching, I found this answer hidden in the search engine:
找了半天,发现这个答案隐藏在搜索引擎里:
Change the line where you define scopes to:
将定义范围的行更改为:
private static final List<String> SCOPES = Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);
回答by user5538597
I just had this problem and it is likely that you have created the credential file using a scope that does not allow inserting a file. Remove the credential file and re-run.
我刚刚遇到了这个问题,很可能您使用不允许插入文件的范围创建了凭证文件。删除凭证文件并重新运行。
回答by Roman
Been having same quota errors for months. Tried everything. It looks like problem on Google side. Among all google products, Calendar API does not have any way to support their team. If anyone knows or have been able to contact Google team about Calendar API, let us know!
几个月来一直有相同的配额错误。什么都试过了。看起来像谷歌方面的问题。在所有谷歌产品中,Calendar API 没有任何方式支持他们的团队。如果有人知道或能够联系 Google 团队了解 Calendar API,请告诉我们!
回答by SpyZip
For me the problem was that the url was http... and it should be https...
对我来说,问题是 url 是 http...,它应该是 https...
回答by Cesarov
I had the same problem but in my case resolve this with:
我有同样的问题,但在我的情况下解决这个问题:
private static final List<String> SCOPES =
Arrays.asList(DriveScopes.DRIVE);
from DriveScopes
and also create a new directory
并创建一个新目录
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/2/drive-java-quickstart.json");
and i solved the problem
我解决了这个问题