我为此寻找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代替它,它似乎确实有效。
答案 0 :(得分:2)
我建议您设置一个tcpdump
会话,以查看拒绝连接的来源。特别是,请查看成功连接和不成功连接的源IP和目标IP地址。
以上两种可能性旨在测试:
curl
正在使用的源IP地址不同的源IP地址发送请求。