Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java.net.ConnectException:连接被拒绝_Java_Connection_Firewall_Jersey Client - Fatal编程技术网

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

获取java.net.ConnectException:连接被拒绝,java,connection,firewall,jersey-client,Java,Connection,Firewall,Jersey Client,为此,我一直在寻找解决方案,但似乎都不适用于我的情况。下面是: 我有一个应用程序需要向第三方域进行服务调用。我正在使用jersey客户端进行此服务呼叫。打这个电话的代码是 ClientResponse resp = resourceWithParams. header("Authorization", getAccessKeyId() + ":" + hmacSha1.toUpperCase()).

为此,我一直在寻找解决方案,但似乎都不适用于我的情况。下面是: 我有一个应用程序需要向第三方域进行服务调用。我正在使用jersey客户端进行此服务呼叫。打这个电话的代码是

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地址

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

  • 您说您没有使用代理服务器,但Java实际上有一个独立于系统其余部分的代理配置,因此您的Java可能被配置为使用非功能性代理服务器
  • 您的Java系统可能正在使用与
    curl
    使用的源IP地址不同的源IP地址发送请求

  • HTTPS通常在与HTTP不同的端口上运行,即443而不是80。当您使用curl测试连接时,是否使用https?谢谢。我们的管理员做了一个tcpdump,它显示请求将发送到web服务提供商的暂存域。重新启动prod服务器修复了此问题。推测是服务器从过时/缓存的属性文件中提取域信息,但该文件不正确。问题已修复,但根本原因分析仍在进行中。这已再次发生,并且url似乎是正确的。管理员说,当发出请求(从UI)时,他在tcp堆栈上看不到任何内容。有什么想法吗?我会在可能的时候得到更多的信息。谢谢