Rest client java.net.ConnectException:连接超时:connect

时间:2014-03-13 18:25:28

标签: java spring web-services rest jersey-client

您好我在weblogic服务中部署了Spring Rest Webservice。我推进了谷歌浏览器的休息客户端,完全可以通过https运行 我正在尝试通过https客户端创建客户端。我有ca证书和客户证书。我是从下面的链接创建的 Accessing secure restful web services using jersey client但我在下面会遇到例外情况

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection timed out: connect
        at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)
        at com.sun.jersey.api.client.Client.handle(Client.java:652)
        at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
        at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
        at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
        at org.app.last.JerseyClient.get_JSON(JerseyClient.java:39)
        at org.app.last.JerseyClient.main(JerseyClient.java:239)
    Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:564)
        at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
        at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:272)
        at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)
        at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:253)
        at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153)
        ... 6 more

5 个答案:

答案 0 :(得分:2)

您似乎仍然遇到代理问题。而且你也可能有证书问题

  1. 检查您是否正确配置代理
  2. 检查您的证书是否已过期。如果已过期,请申请新的
  3. 与fiddler核实您是否将证书发送到服务器

答案 1 :(得分:1)

检查防火墙设置,查看除了浏览器外是否阻止了出站端口。偶尔会发生这种情况取决于公司。

默认情况下会打开出站端口,但系统管理员可能已对此进行更改 - 请参阅此answer

此外,可能会在公司代理级别阻止连接。例如,在某些公司中,您只能使用一个浏览器进行浏览,如果您安装并尝试使用其他浏览器访问互联网,则会收到一条消息“它只允许使用浏览器XX浏览互联网”或超时。

这是有效的,因为代理会检查User-Agent标头。

许多代理需要身份验证,并且只授予授权用户访问权限。在浏览时,Chrome会在您的凭据中自动填充某些HTTP标头,但您的程序不会这样做。

要解决此问题,请尝试以下方法:

  • 使用System.out.println将Url打印到控制台,并确认它与您在Chrome中输入的内容完全相同

  • 使用非基于浏览器的命令行实用程序(如curl或wget)来检查您是否可以访问例如google和端点

  • 检查防火墙设置

答案 2 :(得分:0)

抱歉迟到了。因为我不喜欢忽略ssl方法,你可以检查以下网址,这可能对你http://snippet-pocket.blogspot.in/2010/07/ssl-authentication-with-apache.html有用,它解释了客户端身份验证。

答案 3 :(得分:0)

这不是证书问题,否则您会看到 SSL 错误。检查您的代理设置。在 Spring 应用程序中,您可以将以下内容添加到 VM 参数以设置您的代理: -Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080

答案 4 :(得分:0)

在 eureka 服务器应用程序的 application.properies 文件中添加以下属性:

eureka.server.peer-node-read-timeout-ms=6000

如果它不起作用,请尝试增加读取时间。

这对我来说很有效。