web-dev-qa-db-ja.com

HttpHostConnectExceptionの原因は何ですか?

ウェブサイトの検索でオートコンプリート/先行入力機能を使用しています。私は彼らがそれに関連する例外であることがいつかわかります。プロキシサーバーを使用しています。

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アプリケーションがWebサイトでリクエストをサポートしていないため、Android applications

13
pushya

「接続拒否」エラーは、TCP接続を現在リッスンしていないIPアドレス/ポートへの接続を開こうとすると発生します。リッスンしていない場合、サーバー側のOS接続を「拒否」します。

これが断続的に発生する場合、最も可能性の高い説明は次のとおりです(IMO):

  • 話しているサーバー( "proxy.xyz.com" /ポート60)が上下している、または
  • そこに何かがある1 クライアントと、機能していないホストなどに断続的にリクエストを送信しているプロキシとの間。

これは、AndroidアプリケーションがWebサイトでリクエストをサポートしていないため、Android applications 。

ありそうもないようです。 「接続が拒否されました」という例外メッセージは、サーバーではなく、接続を拒否しているのはプロキシであると言いました。さらに、サーバーが特定の種類の要求を処理しない場合でも、TCP接続を受け入れて、要求が何であるかを確認してから拒否することができます。


1-たとえば、ラウンドロビンがDNS名を異なるIPアドレスに解決するDNSである場合があります。または、IPベースのロードバランサーでもかまいません。

27
Stephen C

私の場合、問題はHTTP URLに「s」がないことでした。エラー:「HttpHostConnectException:someendpoint.com:80 [someendpoint.com/127.0.0.1]への接続に失敗しました:接続が拒否されました」エンドポイントとIPは明らかにネットワークを保護するために変更されました。

0
Bob Small