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

Entrée/Sortie Java Discussion :

Requête HTTP via httpClient bien trop longue


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Par défaut 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 : 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 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 : 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;
    	}
    }
    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

  2. #2
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Si tu récupères une image, 11 secondes ça peut être normal non ? Combien de mégaoctets récupère-tu ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Par défaut
    je récupère quelques caractères seulement la plupart du temps.

    j'interroge une caméra, donc je demande des infos comme le modèle, le port RTSP.... la réponse fait une petite ligne de texte du genre :

    Brand.ProdNbr=M3005

    si je fais un wget ou directement dans le navigateur c'est instantané. J'avais également fait ce code via d'autres methodes, c'etait très rapide, mais httpClient est la seule librairie ou je peux préciser l'IP source depuis laquelle je veux faire ma requête...

  4. #4
    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
    Si tu retire l'ip source, tu as les même temps?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Par défaut
    oui, exactement pareil...

    la camera que je veux joindre est sur un réseau :
    10.16.106.0/24

    la machine qui essaie de faire la requête est sur un autre :
    10.16.192.0/24
    (j'ai une route depuis la machine qui fait la requête jusqu'à ma camera)

    pour simplifier les TESTS :
    je met la machine qui fait la requete sur le même réseau que la camera.

    J'ai toujours le même temps de réponse.
    De plus, si comme tu le propose j'enlève l'IP source, cela ne change rien..

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Par défaut
    est ce que l'URL que l'on définit peut poser un problème si elle est composée de différents paramètres GET ?

    une URL classique que j'utilise :
    https://10.16.106.32/axis-cgi/param....=Brand.ProdNbr

    si je lance dans un navigateur, le code source renvoie juste :
    Brand.ProdNbr=M3005

    mon prog récupere la même chose, mais en 10secondes..

    si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     wget --no-check-certificate  --bind-address 10.16.197.253 "https://root:mdp@10.16.106.33/axis-cgi/param.cgi?action=list&group=Brand.ProdNbr"
    je récupere bien
    Brand.ProdNbr=M3005
    mais dans un fichier créé nommé :
    param.cgi?action=list&group=Brand.ProdNbr

    si jamais je ne met pas les cotes, la connexion dure 10 sec et je récupere la liste completes de tous les parametres de la camera (qques Mo)

    peut être que mon prog renvoie bien mon résultat mais qu'il récupere aussi autre chose que je ne vois pas et qui prend du temps..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Requête HTTP Via URL HTTPS
    Par newsdas dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 13/01/2011, 16h55
  2. Exécuter requête HTTP via PHP
    Par calitom dans le forum Langage
    Réponses: 0
    Dernier message: 15/07/2010, 15h11
  3. requêtes http via openssl
    Par gaelle40 dans le forum Réseau
    Réponses: 2
    Dernier message: 10/07/2009, 17h33
  4. [MySQL] Requête trop longue ?
    Par Thomas1434 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 24/03/2006, 21h55
  5. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54

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