1

我使用服务帐户时收到berlow错误。 相同的代码在本地运行良好,而且iam能够使用服务帐户创建凭证。java.net.SocketTimeoutException:连接超时+谷歌目录,管理员sdk API

....Error Snapshot : 
aused by: java.net.SocketTimeoutException: connect timed out 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
     at java.net.Socket.connect(Socket.java:579) 
     at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618) 
     at sun.net.NetworkClient.doConnect(NetworkClient.java:175) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:378) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:473) 
     at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:270) 
     at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:327) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 
     at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 
     at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1090) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
     at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) 
     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) 
     at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283) 
     at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
     at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269) 
+0

代码快照------ >> GoogleCredential凭证=新GoogleCredential.Builder().setTransport(TRANSPORT).setJsonFactory(jsonFactory).setServiceAccountId(“SERVICE_ACCOUNT_EMAIL” ).setServiceAccountPrivateKeyFromP12File(new java.io.File(“SERVICE_ACCOUNT_PKCS12_FILE_PATH”)).setServiceAccountScopes(scopes).setServiceAccountUser(“[email protected]”)。build(); – kcforstackoverflow 2014-11-05 05:04:16

+0

我已经得到了答案,但不知何故无法发布它...我会发布一次我给予访问 – kcforstackoverflow 2014-11-05 09:06:50

回答

2

请尝试以下...

  1. 设置在Linux操作系统中的代理。
  2. 创建存储时 - 新的NetHttpTransport()提供了自己的方式来创建套接字并在传输中添加代理。

实施例的代码...

public HttpClient myHttpClient() throws Exception { 

     SchemeRegistry schemeRegistry = new SchemeRegistry(); 
     //SetRegisrty for both HTTP and HTTPS - Check google for this. 
     schemeRegistry.register(new Scheme("http", PlainSocketFactory 
       .getSocketFactory(), YOUR_PROXY_PORT)); 
     schemeRegistry.register(new Scheme("https", SSLSocketFactory 
       .getSocketFactory(), 443)); 

     HttpParams params = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(params, 30 * 1000); // SET the timeout 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
     ClientConnectionManager connManager = new ThreadSafeClientConnManager(
       params, schemeRegistry); 
     DefaultHttpClient httpClient = new DefaultHttpClient(connManager, 
       params); 
     try { 
      int proxyPort = YOUR_PROXY_PORT; 
      String proxyHost = "YOUR_PROXT_HOST_NAME"; 
      if (proxyPort > 0 && proxyHost != null && proxyHost.length() > 0) { 
       System.setProperty("https.proxyHost", proxyHost); 
       System.setProperty("https.proxyPort", proxyPort + ""); 
       System.setProperty("http.proxyHost", proxyHost); 
       System.setProperty("http.proxyPort", proxyPort + ""); 
       HttpHost proxy = new HttpHost(proxyHost, proxyPort); 
       httpClient.getParams().setParameter(
         ConnRoutePNames.DEFAULT_PROXY, proxy); 
      } 
     } catch (NullPointerException e) { 
      System.out.println("Proxy error here"); 
     } 
     return httpClient; 
    } 


    public static HttpTransport myNetHttpTransport() 
       throws Exception { 
      return new ApacheHttpTransport(myHttpClient()); 
     } 

使用.setTransport(myNetHttpTransport())代替NetHttpTransport()。

我们在此花了很长时间。但截至目前,这似乎正在起作用。请让我知道如果有任何帮助...

相关问题