web-dev-qa-db-fra.com

Quelles sont les causes de HttpHostConnectException?

J'ai une fonction de saisie automatique/saisie anticipée dans Rechercher mon site Web. Je vois que quelque temps leur est une exception associée. Nous utilisons un serveur proxy.

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)

Causé par: Java.net.ConnectException: connexion refusée

Voici comment j'ai codé

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;
}

Quelqu'un peut-il me dire pourquoi cette exception me concerne quelque temps seulement? est-il possible que cette exception soit provoquée lorsqu'une demande de recherche est faite à partir d'applications Android, car notre site Web ne prend pas en charge une demande à partir d'applications Android

12
pushya

Une erreur "connexion refusée" se produit lorsque vous essayez d'ouvrir une connexion TCP vers une adresse IP/un port sur lequel rien n'écoute actuellement les connexions. Si rien n’écoute, le système d’exploitation côté serveur "refuse" la connexion.

Si cela se produit par intermittence, les explications les plus probables sont (IMO):

  • le serveur auquel vous parlez ("proxy.xyz.com"/port 60) est en train de monter et descendre, OU
  • il ya quelque chose1 entre votre client et le proxy qui envoie par intermittence des demandes à un hôte non opérationnel, ou quelque chose du genre.

Est-il possible que cette exception soit provoquée lorsqu'une demande de recherche est faite à partir d'applications Android, car notre site Web ne prend pas en charge une demande à partir d'applications Android.

Cela semble peu probable. Vous avez dit que le message d'exception "connexion refusée" indiquait que c'était le proxy qui refusait la connexion, pas votre serveur. De plus, si un serveur ne devait pas gérer certains types de requêtes, il devait toujours accepter la connexion TCP pour connaître l'état de la requête ... avant de pouvoir la rejeter.


1 - Par exemple, il peut s’agir d’un DNS qui transforme le nom DNS en adresses IP différentes. Ou ce pourrait être un équilibreur de charge basé sur IP.

27
Stephen C

Dans mon cas, le problème était un "s" manquant dans l'URL HTTP. L'erreur était: "HttpHostConnectException: connexion à someendpoint.com:80 [someendpoint.com/127.0.0.1] en échec: connexion refusée" Le point de fin et l'adresse IP ont évidemment changé pour protéger le réseau.

0
Bob Small