IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

apache HTTP client : HttpHostConnectException


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 46
    Par défaut apache HTTP client : HttpHostConnectException
    Bonjour ,

    Je développe une application cliente qui appelle une API web. Lors du déploiement de l'application , elle fonctionne très bien sur ma machine et d'autres machines mais en l’exécutant par hasard sur une nouvelle machine d'un client , il n'est plus capable d'appeler l'API et en consultant les logs j'ai eu cette exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SEVERE: org.apache.http.conn.HttpHostConnectException: Connection to http://server.name.org refused
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)
        at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
        at WebServiceCallManager.callWebServiceGET(Unknown Source)
        at InfoThreadCaller.call(Unknown Source)
        at RegularTestExecutor$1.call(Unknown Source)
        at RegularTestExecutor$1.call(Unknown Source)
        at javafx.concurrent.Task$TaskCallable.call(Task.java:1259)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.lang.Thread.run(Thread.java:724)
    Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
        ... 14 more
    Et voici la méthode qui pose le probléme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    public Call callWebServiceGET(WebService ws,int pageNumber) throws Exception {
                        // TODO Auto-generated method stub
     
                        StringBuilder jsonResponse = null;
                        requestURL = this.serverURL.concat(ws.getWeb_service());
     
     
                        /*
                         * Define the call
                         */
                        Call call = new Call(ws.getWeb_service());
                        //SET REQUEST TYPE
                        call.setRequestType("GET");
     
                        /*
                         * Parameters for a call instance
                         */
                        long startTime =0;
                        long stopTime=0;
                        String responseTime="";
                        String dataSize="";
                        String requestSent="";
                        String serverResponse="";
                        String ch="";
     
     
                        try {
     
     
     
     
                                    DefaultHttpClient httpClient = new DefaultHttpClient();
                                    HttpGet getRequest;
     
     
     
                                        requestURL=requestURL.concat("?page="+pageNumber);
     
     
                                        getRequest = new HttpGet(requestURL);
     
     
     
     
                                    System.out.println("Request Sent to Server");
                                    System.out.println(getRequest);
                                    //SET REQUEST SENT
                                    requestSent=getRequest.toString();
                                    call.setRequestSent(requestSent);
     
                                    this.addGETHeaders(getRequest);
     
     
                                    startTime = System.currentTimeMillis();
                                    HttpResponse response = httpClient.execute(getRequest);
                                    stopTime = System.currentTimeMillis();
     
     
                                    //SET RESPONSE TIME
                                    responseTime = (stopTime - startTime)+" ms";
                                    call.setResponseTime(responseTime);
     
     
     
                                    HttpEntity entity = response.getEntity();
     
                                    InputStream is = entity.getContent();
     
     
                                    BufferedReader reader = new BufferedReader(new InputStreamReader(
                                             is, "iso-8859-1"), 8);
     
     
     
                                    jsonResponse = new StringBuilder();
     
                                    String line = null;
                                    while ((line = reader.readLine()) != null) {
                                        jsonResponse.append(line + "\n");
                                    }
     
     
     
                                    serverResponse=jsonResponse.toString();
     
     
     
     
     
                                     JsonParseManager parseManager = new JsonParseManager();                       
                                        List<JSONObject> responseRecordsList = parseManager.getRecords(jsonResponse);
     
                                        this.setResponseRecordsList(responseRecordsList);
     
                                        int statusCode = response.getStatusLine().getStatusCode();
     
                                        if(statusCode !=200) {
     
                                            call.setOperationResult("Failure");
                                            call.setRecordsNb("No Records");
                                        }
     
                                        else {
                                            ch=String.valueOf(responseRecordsList.size());
                                            call.setOperationResult("Success");
                                            call.setRecordsNb(ch);
                                        }
     
     
     
     
     
     
     
                                    ByteArrayOutputStream baos = new ByteArrayOutputStream(1024 * 1024);
                                    InputStream inputStream = new ByteArrayInputStream(jsonResponse.toString().getBytes());
                                    try {
                                        IOUtils.copy(inputStream, baos);
                                        byte[] bytes = baos.toByteArray();
                                        dataSize = String.format("%d bytes", bytes.length);
     
                                        call.setDataSize(dataSize);
     
                                        } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
     
     
     
                            } catch (Exception e) {
     
     
                                StringWriter sw = new StringWriter();
                                e.printStackTrace(new PrintWriter(sw)); 
                                String exceptionDetails = sw.toString();
                                e.getStackTrace();
                                ErrorLog.logger.log(Level.SEVERE, exceptionDetails);
                            }
     
     
                        return call;   
     
                    }
    Il est à noter que l’application marche parfaitement sur d'autres machines.J'ai consulté les forums et j'ai vu des réponses propos des proxys mais j'avais une réponse claire pour résoudre c probléme.

    Aide SVP

    Merci

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Bonjour,

    Puisque votre code fonctionne sur certain postes, c'est qu'il fonctionne. Le problème ne vient pas de lui.
    Ce n'est pas un problème de dépendance de librairie, sans quoi votre code ne se lancerait pas.
    Ce n'est pas un problème de configuration réseau à proprement dit, puisque la requete est bien soumise au serveur, sans quoi, il ne répondrait pas que la connexion est refusée, il ne répondrait pas du tout.
    Je pencherai plutôt sur un pb. de configuration de plage d'adresse DHCP-Apache.
    Je suppose que le poste client récalcitrant dispose d'une configuration IP automatique (DHCP). De son côté, je sais que l'on peut configurer un serveur apache pour qu'il n'autorise que les postes dont l'adresse IP est contenue dans une plage d'adresse définie dans la configuration du serveur. Ainsi, on évite les .htaccess, et on garantit un accès unique aux postes autorisés. Cela sous-entendrait que votre poste client a hérité d'une adresse IP qui se trouve en dehors de la plage d'adresse autorisée par le serveur http.
    Si vous n'utilisez pas DHCP, c'est que selon cette hypothèse, vous avez définit une adresse IP en dehors de cette plage.
    Il faudrait peut-être commencé par contrôler la configuration apache à ce niveau.
    Si mon hypothèse s'avère exacte, il ne restera plus qu'à modifier manuellement l'adresse IP si vous l'aviez configurée manuellement, ou bien réaliser une réservation de bail sur le serveur DHCP pour s'assurer que ce poste hétrite d'une adresse autorisée.

    Si cela est possible, vous pouvez tenter une petite expérience. Relevez la configuration IP d'un poste sur lequel fonctionne votre code. Puis éteignez ce poste. Appliquez manuellement la même configuration sur le poste récalcitrant. Si mon hypothèse est bonne, le poste récalcitrant ainsi reconfiguré devrait alors pouvoir se connecter au serveur...
    Enfin voilà, ce n'est qu'une hypothèse...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par albert55 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SEVERE: org.apache.http.conn.HttpHostConnectException: Connection to http://server.name.org refused
    ....
    Caused by: java.net.ConnectException: Connection timed out: connect
    Il est à noter que l’application marche parfaitement sur d'autres machines.J'ai consulté les forums et j'ai vu des réponses propos des proxys mais j'avais une réponse claire pour résoudre c probléme.
    Le client a probablement une firewall, soit software, soit au niveau de son réseau, qui t'empêche d'accéder à server.name.org.

    LA première chose à faire est de pointer un navigateur vers cette adresse depuis le poste pour voir si ça répond.

    Si ça ne répond pas -> Demander au client d'ouvrir son firewall / de corriger son réseau
    Si ça répond -> le navigateur a surement une config proxy ou autre, il faut l'utiliser dans ton application.

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Effectivement, je n'avais pas pensé au firewall...
    En effet, l'erreur que vous rencontrez mentionne bien un problème côté hôte. Tchize a probablement raison.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/03/2014, 10h44
  2. Apache HTTP Client : paramétres d'une requéte PUT
    Par albert55 dans le forum Général Java
    Réponses: 4
    Dernier message: 15/07/2013, 14h39
  3. Apache HTTP Client : Corps d'une requéte POST
    Par albert55 dans le forum Général Java
    Réponses: 3
    Dernier message: 12/07/2013, 16h43
  4. Réponses: 0
    Dernier message: 18/07/2011, 15h25
  5. Apache : HTTP et HTTPS
    Par AurelBUD dans le forum Apache
    Réponses: 4
    Dernier message: 29/08/2005, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo