java - 获取 java.net.ConnectException : Connection refused

标签 java connection firewall jersey-client

我为此寻找了解决方案,但似乎没有一个适用于我的情况。所以这里是: 我有一个应用程序需要对第三方域进行服务调用。我正在使用 Jersey 客户端进行此服务调用。进行此调用的代码是

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

其中resourceWithParams是 Jersey 网络资源。请注意,即使它是一个 POST,Web 服务也需要一个查询字符串和空正文。这可能是有问题的设计,但这就是我们必须解决的问题。

此设置在我的本地计算机以及我们的预生产服务器上运行良好。然而在我们的生产服务器上它给出了一个异常(exception):

com.sun.jersey.api.client.ClientHandlerException:java.net.ConnectException:连接被拒绝

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

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

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

3)在本地主机上工作正常。

4) Rest Web 服务使用 https,并且在我们的服务器上安装了正确的证书,这一点通过在产品上 curl Web 服务工作正常这一事实得到了证明。

对于问题可能是什么以及我们应该从哪里开始寻找有什么想法吗?

编辑:

正如前面提到的,我们使用 https 连接到 Web 服务。如果我们使用 http 来代替,它似乎确实有效。

最佳答案

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

上面的设计旨在测试两种可能性:

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

关于java - 获取 java.net.ConnectException : Connection refused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18365667/

相关文章:

java - 如何将节点添加到 GridPane 而不让程序返回 InvocableTargetException?

java - 在 Java 中禁用 Microsoft dBase 驱动程序的自动提交

c# - "Connection must be open for this operation"ODP异常

java - 在一个主题中定义多个textColor

java - Android 应用程序过早退出

java - 相对较长的 TimeOut 连接会产生什么后果?

python - 创建 10 个 Tor 电路实例的有效方法

linux - 意外启用防火墙 - 到端口 22 的 SSH 连接被拒绝

azure - 部署 Azure 防火墙 IP 组更改因冲突而失败

php - 如果您在防火墙后面的 NAT 上,您如何使用 php xdebug?