Requête HTTP via httpClient bien trop longue
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 :
Code:
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 getConfigurationSSL() precise que l'on accepte tous les certificats
la methode getConfigurationAuthentification() definit le bon login/mdp
la methode getRequestConfig() créé la configuration avec une adresse locale :
Code:
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;
}
} |
Ce code fonctionne et me permet de récuperer les resultats que je veux, mais j'ai tout de même un énorme soucis..
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