Bonjour,
Je viens de fignoler un bout de code permettant d'envoyer des requêtes HTTP à des cameras IP et de récupérer le résultat associé.
J'utilise la librairie httpClient-4.3.1
voici le code que j'utilise pour effectuer mes requêtes :
la methode getConfigurationSSL() precise que l'on accepte tous les certificats
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 try { SSLContext contexteSSL = getConfigurationSSL(ipDestinataire); CredentialsProvider auth = getConfigurationAuthentification(ipDestinataire); CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(contexteSSL)).setDefaultCredentialsProvider(auth).build(); httpget = new HttpGet(urlString); if (ipSource != null) httpget.setConfig(getRequestConfig(ipSource)); else httpget.setConfig(getRequestConfig()); response = httpclient.execute(httpget); entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader buffer = new BufferedReader(new InputStreamReader(is)); String str = ""; // lecture du contenu du flux et stockage sous forme de chaine while (null != ((str = buffer.readLine()))){ if (str.length() > 0){ str = str.trim(); if(!str.equals("")) retour += str; } } // fermeture du flux buffer.close(); EntityUtils.consume(entity); response.close(); httpclient.close(); } catch (Exception e) { Logger.getLoggerParDefaut().debug("Exception lros de l'appel HTTP"); e.printStackTrace(); }
la methode getConfigurationAuthentification() definit le bon login/mdp
la methode getRequestConfig() créé la configuration avec une adresse locale :
Ce code fonctionne et me permet de récuperer les resultats que je veux, mais j'ai tout de même un énorme soucis..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private static RequestConfig getRequestConfig(String ipEcoute) { try { return RequestConfig.custom().setSocketTimeout(TIMEOUT_CONNEXION).setConnectionRequestTimeout(TIMEOUT_CONNEXION).setConnectTimeout(TIMEOUT_CONNEXION) .setLocalAddress(InetAddress.getByName(ipEcoute)).setAuthenticationEnabled(true).build(); } catch (UnknownHostException e) { return null; } }
la méthode execute() de la classe CloseableHttpClient est extrêmement longue.. elle met 11 secondes pour renvoyer le résultat sous forme d'une CloseableHttpResponse (dans le cas ou l'URL est atteignable, sinon, retour au bout de TIMEOUT_CONNEXION secondes)
Est-ce normal ? je suppose que non mais je ne vois pas ce qui peut causer ce problème..
Merci de votre aide
Partager