是啥导致 HttpHostConnectException?

Posted

技术标签:

【中文标题】是啥导致 HttpHostConnectException?【英文标题】:What causes HttpHostConnectException?是什么导致 HttpHostConnectException? 【发布时间】:2013-03-10 21:46:52 【问题描述】:

我在搜索我的网站时具有自动完成/提前输入功能。我看到有时他们是与之相关的例外。我们正在使用代理服务器。

org.apache.http.conn.HttpHostConnectException: Connection to http://proxy.xyz.com:60 refused    

at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:159)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
at com.xxx.dd.sone.integration.SearchDAO.getJSONData(SearchDAO.java:60)
at com.xxx.dd.sone.integration.SearchDAO.searchAutoCompleteResults(SearchDAO.java:560)
at com.xxx.dd.sone.presentation.util.SearchAutoCompleteUtil.doGet(SearchAutoCompleteUtil.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:845)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:352)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:236)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:22)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)

原因:java.net.ConnectException:连接被拒绝

这是我的编码方式

public HashMap<String, Object> getJSONData(String url)throws Exception 
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpParams params = httpClient.getParams();
    try 
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
     catch (Exception e) 
        e.printStackTrace();
        throw e;
    
    HttpHost proxy = new HttpHost(proxy.xyz.com, 60);
    ConnRouteParams.setDefaultProxy(params, proxy);
    URI uri;
    InputStream data = null;
        uri = new URI(url);
        HttpGet method = new HttpGet(uri);
        HttpResponse response=null;
        try 
        response = httpClient.execute(method);
        catch(Exception e) 
            e.printStackTrace();
            throw e;
        
        data = response.getEntity().getContent();
    Reader r = new InputStreamReader(data);
    HashMap<String, Object> jsonObj = (HashMap<String, Object>) GenericJSONUtil.fromJson(r);
    return jsonObj;

谁能告诉我为什么我只在某个时候得到这个异常?这可能是因为我们的网站不支持从 android 应用程序发出搜索请求而导致此异常吗

【问题讨论】:

您的代理主机是否在端口 60 上运行?如果不是 - 这将导致连接被拒绝消息。 它在同一个端口上运行。此外,这种异常不会每次都发生。只是有时。 不幸的是,您必须查看代理拒绝连接的原因。可能是代理配置错误? 该代理正在我公司范围内的大多数应用程序中使用。我认为配置代理不会有任何问题。还有一个问题,代理配置是否因不同平台(如 Mac/Android)而异 【参考方案1】:

你必须在某些时候为gradle设置代理服务器,你可以尝试在.gradle文件下的gradle.properties中更改代理服务器的ip地址

【讨论】:

【参考方案2】:

当您尝试打开与当前没有任何连接侦听的 IP 地址/端口的 TCP 连接时,会发生“连接被拒绝”错误。如果没有监听,服务器端的操作系统会“拒绝”连接。

如果这种情况是间歇性发生的,那么最可能的解释是 (IMO):

与您通话的服务器(“proxy.xyz.com”/端口 60)正在上下波动,或者 您的客户端和代理之间存在1间歇性地向无法正常工作的主机发送请求的东西。

当我们的网站不支持从 Android 应用程序发出搜索请求时,是否可能会导致此异常。

似乎不太可能。您说“连接被拒绝”异常消息说它是拒绝连接的代理,而不是您的服务器。此外,如果服务器不处理某些类型的请求,它仍然必须接受 TCP 连接以找出请求是什么……然后才能拒绝它。


1 - 例如,它可能是一个将 DNS 名称循环解析为不同 IP 地址的 DNS。或者它可以是一个基于 IP 的负载均衡器。

【讨论】:

只是为了清除搜索请求将发送给另一个服务提供商,我们已经在我们的网站上实施了他们的服务。我们所做的只是将消费者的请求发送给搜索服务提供商并显示他们发送的信息 “你的客户端和代理之间有东西间歇性地向一个不能正常工作的主机发送请求,或者什么”你所说的不能正常工作的主机是什么意思? 代理服务器以外的某些主机不期望这些连接请求;即它没有充当代理... 我们该如何解决这个问题? @pushya - 这是可能的。如果你的理论是正确的,那么你提出的修复可能会奏效。但是,在开始责备代理之前,您需要真正的具体证据。【参考方案3】:

在我的情况下,问题是 HTTP URL 中缺少“s”。错误是: “HttpHostConnectException: Connect to someendpoint.com:80 [someendpoint.com/127.0.0.1] failed: Connection denied” 端点和 IP 明显改变以保护网络。

【讨论】:

以上是关于是啥导致 HttpHostConnectException?的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致了这个推进错误?

是啥导致了 NSInvalidArgumentException?

是啥导致移动构造函数被删除

是啥导致系统发出蜂鸣声?

是啥导致 opensuse Docker 膨胀?

是啥导致连接中止?