2014-03-04 32 views
4

真的卡在这里。该代码,从由谷歌提供的示例内置:尝试使用Java API观看Google Drive上的更改时出现“401未授权”客户端

public static void main(String[] args) { 
    try { 
     HttpTransport httpTransport = new NetHttpTransport(); 
     JsonFactory jsonFactory = new JacksonFactory(); 

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
      httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE)) 
      .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).setApplicationName("Google Push").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("document.txt"); 
    BufferedWriter bw = new BufferedWriter(new FileWriter(fileContent)); 
    bw.write("allo!!!!"); 
    bw.close(); 

    System.out.println("file created? -> " + fileContent.createNewFile()); 
    FileContent mediaContent = new FileContent("text/plain", fileContent); 

    File file = service.files().insert(body, mediaContent).execute(); 
    System.out.println("File ID: " + file.getId()); 

    watchChange(service, "channelId", "web_hook", "https://clementlevallois.net/notifications"); // line 78 

} catch (IOException ex) { 
    Logger.getLogger(DriveCommandLine.class.getName()).log(Level.SEVERE, null, ex); 
} 

} 

private static Channel watchChange(Drive service, String channelId, String channelType, String channelAddress) { 

    Channel channel = new Channel(); 
    channel.setId(channelId); 
    channel.setType(channelType); 
    channel.setAddress(channelAddress); 
    try { 
     return service.changes().watch(channel).execute(); //line 91 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

堆栈跟踪:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized 
    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$1.interceptResponse(AbstractGoogleClientRequest.java:312) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 
    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 Controller.DriveCommandLine.watchChange(DriveCommandLine.java:91) 
    at Controller.DriveCommandLine.main(DriveCommandLine.java:78) 
+0

你代理服务器的后面? –

+0

不支持代理... – seinecle

+0

您可以将http请求和响应转储到您的问题中 – pinoyyid

回答

0

下面是一些步骤,可以帮助你解决你的问题:

-Look到您的谷歌企业应用套件帐户可能是您的Google文档API访问权限已关闭。

- 尝试验证您的令牌和密钥,然后重定向网址。

1

API在调用Drive API时返回HTTP 401或HTTP 403响应。这些错误可能表明任何的:

令牌到期, 撤销凭证,(这将导致这两个访问令牌和刷新令牌停止工作), 令牌不授权所需的范围, 请求未通过OAuth正确授权2.0协议。

令牌过期可以通过调用refreshToken()来处理。如果调用失败 “无效凭证”

相关问题