【问题标题】:Rest client java.net.ConnectException: Connection timed out: connect休息客户端java.net.ConnectException:连接超时:连接
【发布时间】:2014-04-18 17:16:17
【问题描述】:

您好,我在 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

【问题讨论】:

  • 似乎您使用的任何端点都无效或没有响应。
  • 我可以在 chrome rest 客户端中使用这些端点来完美地工作。
  • 很可能你真的有一个超时。这可能是由于网络问题(网络速度慢、服务器无响应等)而发生的GET,或者像 curl 这样的工具,如果是 POSTPUT)
  • 我正在向服务器发送应用程序/json 空白发布请求。方法是 public T get_JSON(Class responseType,String input) throws UniformInterfaceException { return webResource.accept(javax.ws.rs.core.MediaType.APPLICATION_JSON).post(responseType,input);并且端点与chrome浏览器中的高级休息客户端完美配合
  • @ramesh027 也许您在 Java 中的实现最终会得到一个无效的 URL。 API 可能会在您指定的任何 URL 之后附加一些内容。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    检查您的防火墙设置,查看除浏览器外的出站端口是否被阻止。有时会发生这种情况,具体取决于公司。

    默认情况下,出站端口是打开的,但这可能已被系统管理员更改 - 请参阅此answer

    此外,连接可能在您的公司代理级别被阻止。例如在一些公司你只能用一个浏览器上网,如果你安装并尝试用另一个浏览器访问互联网,你会收到一条消息“它只允许用浏览器 XX 浏览互联网”,或者超时。

    这是因为代理会检查 User-Agent 标头。

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

    要解决此问题,请尝试以下可能性:

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

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

    • 检查您的防火墙设置

    【讨论】:

    • 我尝试使用代理连接,即使我在线程“main” com.sun.jersey.api.client.ClientHandlerException 中收到休闲错误异常:java.net.ConnectException:连接超时:在 com.sun.jersey.api.client.Client.handle(Client.java:652) 在 com.sun.jersey 连接 com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)。 api.client.WebResource.handle(WebResource.java:682) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at
    • 我在忽略 ssl 上工作,但它不适用于 ssl
    • 我把问题贴在另一个问题stackoverflow.com/questions/22452079/…
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      这对我来说是有效的。

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 2013-12-17
        • 2019-03-23
        • 2014-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-27
        相关资源
        最近更新 更多