获取java.net.ConnectException:连接被拒绝

时间:2013-08-21 19:07:19

标签: java connection firewall jersey-client

我为此寻找SO的解决方案,但它们似乎都不适用于我的情况。所以这里: 我有一个应用程序需要对第三方域进行服务调用。我正在使用泽西客户端来打电话。拨打此电话的代码是

ClientResponse resp = resourceWithParams.
                      header("Authorization", getAccessKeyId() + ":" +
                      hmacSha1.toUpperCase()).
                      post(ClientResponse.class,"");

其中resourceWithParams是球衣网络资源。请注意,即使它是POST,Web服务也需要查询字符串和空体。它可能是有问题的设计,但这是我们必须合作的。

此设置在我的本地计算机以及我们的preprod服务器上运行正常。但是在我们的生产服务器上它提供了一个例外:

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused

以下几点可能有助于我指出正确的方向:

1)当我们在prod服务器命令行上使用curl向Web服务发送请求时,我们得到了有效的响应,因此似乎没有防火墙问题。只有当我们通过Web应用程序尝试它时才会发生这种情况,即通过使用jersey客户端的Java代码。

2)prod服务器上没有设置代理

3)从localhost可以正常工作。

4)Rest Web服务使用https,并且在我们的服务器上安装了正确的证书,这可以通过{{1}使用prod上的web服务正常工作来证明。

关于问题可能是什么以及我们应该从哪里开始寻找的任何想法?

编辑:

如上所述,我们使用https连接到Web服务。如果我们使用http代替它,它似乎确实有效。

1 个答案:

答案 0 :(得分:2)

我建议您设置一个tcpdump会话,以查看拒绝连接的来源。特别是,请查看成功连接和不成功连接的源IP和目标IP地址。

以上两种可能性旨在测试:

  1. 您说您没有使用代理服务器,但Java实际上与系统的其余部分具有单独的代理配置,因此可能是您的Java配置为使用非功能性代理服务器。
  2. 您的Java系统可能正在使用与curl正在使用的源IP地址不同的源IP地址发送请求。