获取java.net.ConnectException:连接被拒绝
为此,我一直在寻找解决方案,但似乎都不适用于我的情况。下面是: 我有一个应用程序需要向第三方域进行服务调用。我正在使用jersey客户端进行此服务呼叫。打这个电话的代码是获取java.net.ConnectException:连接被拒绝,java,connection,firewall,jersey-client,Java,Connection,Firewall,Jersey Client,为此,我一直在寻找解决方案,但似乎都不适用于我的情况。下面是: 我有一个应用程序需要向第三方域进行服务调用。我正在使用jersey客户端进行此服务呼叫。打这个电话的代码是 ClientResponse resp = resourceWithParams. header("Authorization", getAccessKeyId() + ":" + hmacSha1.toUpperCase()).
ClientResponse resp = resourceWithParams.
header("Authorization", getAccessKeyId() + ":" +
hmacSha1.toUpperCase()).
post(ClientResponse.class,"");
其中resourceWithParams
是jersey web资源。请注意,即使它是一个POST
,web服务也需要一个查询字符串和空正文。这可能是一个值得怀疑的设计,但这正是我们必须解决的问题
这个设置在我的本地机器和我们的prepod服务器上都运行得很好。但是,在我们的生产服务器上,它给出了一个例外:
com.sun.jersey.api.client.clienthandler异常:java.net.ConnectException:连接被拒绝
以下几点可能有助于为我指明正确的方向:
1) 当我们在prod server命令行上使用curl
向web服务发送请求时,会得到有效的响应,因此似乎没有防火墙问题。只有当我们通过web应用程序(即使用jersey客户端的java代码)进行尝试时,才会发生这种情况
2) prod服务器上没有设置代理
3) 在本地主机上运行良好
4) Rest Web服务使用https,我们的服务器上安装了正确的证书,curl
ing在prod上运行Web服务可以很好地证明这一点
关于这个问题可能是什么以及我们应该从哪里开始寻找,有什么想法吗
编辑:
如前所述,我们使用https连接到Web服务。如果我们改用http,它似乎确实起作用了。我建议您设置一个
tcpdump
会话,查看被拒绝的连接来自何处。特别是,查看成功连接和失败连接的源IP和目标IP地址
有两种可能性是设计用于测试的:
curl
使用的源IP地址不同的源IP地址发送请求HTTPS通常在与HTTP不同的端口上运行,即443而不是80。当您使用curl测试连接时,是否使用https?谢谢。我们的管理员做了一个tcpdump,它显示请求将发送到web服务提供商的暂存域。重新启动prod服务器修复了此问题。推测是服务器从过时/缓存的属性文件中提取域信息,但该文件不正确。问题已修复,但根本原因分析仍在进行中。这已再次发生,并且url似乎是正确的。管理员说,当发出请求(从UI)时,他在tcp堆栈上看不到任何内容。有什么想法吗?我会在可能的时候得到更多的信息。谢谢