0

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

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 服务器命令行上使用向 Web 服务发送请求时,我们得到了一个有效的响应,curl所以似乎没有防火墙问题。只有当我们通过 Web 应用程序(即使用 jersey 客户端通过 java 代码)尝试时才会发生这种情况。

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

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

4) Rest webservice 使用 https 并且在我们的服务器上安装了正确的证书,这一点证明了curl在 prod 上的 webservice 工作正常。

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

编辑:

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

4

1 回答 1

2

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

以上设计用于测试的有两种可能性:

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