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

Langage Java Discussion :

Envoyer requêtes HTTP(S) en spécifiant l'interface source


Sujet :

Langage Java

  1. #1
    Membre régulier
    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
    Points : 107
    Points
    107
    Par défaut Envoyer requêtes HTTP(S) en spécifiant l'interface source
    Bonjour,

    Je poste car je ne trouve pas de réponse nulle part, ou alors des solutions qui ne marchent pas..

    Je souhaiterais envoyer des requêtes HTTP ou HTTPS à une adresse, mais le problème c'est que la machine source possède plusieurs interfaces, avec différents VLANs.

    Je voudrais spécifier par quelle interface (ou adresse ip directement) il faut passer pour lancer l'ordre.

    en bref, l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Socket c = new Socket(address, port);
    mon code actuel :

    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
     
    trustAllHttpsCertificates();									// precise au JRE d'accepter la connexion 				
    		HttpsURLConnection.setDefaultHostnameVerifier(hv);
     
    URL url = new URL(urlString);									// creation de l'url avec l'ordre HTTPS donné
    		URLConnection urlConn = url.openConnection();					// ouverture de la connexion
    		urlConn.setConnectTimeout(TIMEOUT_CONNEXION);
    		urlConn.setDoInput(true);										// precise que l'on attend un retour de cette connexion	
    		urlConn.setUseCaches(false);
    		urlConn.setAllowUserInteraction(true);
     
     
    		// encodage et authentification grâce au login/mdp  
    		String authentication = CAMERA_LOGIN + ":" + CAMERA_PWD;
    		String encodedPassword = "Basic " + new BASE64Encoder().encode(authentication.getBytes());
    		urlConn.setRequestProperty("Authorization", encodedPassword);
    		urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    		urlConn.connect();
    je suis prêt à tester d'autres méthodes et API si nécessaire, mais si quelqu'un connait la manière simple...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par dumoulex Voir le message
    Je voudrais spécifier par quelle interface (ou adresse ip directement) il faut passer pour lancer l'ordre.
    À ma connaissance ce n'est possible avec URLConnection qu'en faisant des bricolages atrocement sales et peu sûrs.

    Le plus simple devrait être d'utiliser Apache HttpClient en utilisant une RequestConfig pour indiquer l'adresse locale.

    Citation Envoyé par dumoulex Voir le message
    en bref, l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Socket c = new Socket(address, port);
    Cet exemple ne spécifie absolument rien côté local.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    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
    Points : 107
    Points
    107
    Par défaut
    oups désolé pour l'exemple socket ! mauvais copier coller.
    plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InetSocketAddress localAdress = new InetSocketAddress(ipSource,0);
    ok je vais regarder du coté de tes liens merci

  4. #4
    Membre régulier
    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
    Points : 107
    Points
    107
    Par défaut
    j'ai fait quelques essais mais je bloque un peu..

    Je teste RequestConfig, effectivement on peut specifier simplement l'IP source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RequestConfig config = RequestConfig.custom()
    		            .setLocalAddress(ipSource);
    Mais je rencontre d'autres problèmes..
    je rajoute quelques difficultés :
    - la connexion doit passer par https, donc il faut que j'accepte le certificat lors de la connexion
    - la connexion nécessite un login/mdp

    je suis les explications de http://hc.apache.org/httpcomponents-client-4.3.x/ mais j'avoue que ce n'est pas simple...

    merci pour votre aide

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Plutôt que les explications, je recommande surtout de regarder les exemples.

    En l’occurrence "Client authentication" et sans doute "Custom SSL context" (tout dépend ce qui te plaît pas au juste dans le fonctionnement normal de HTTPS.)

    Citation Envoyé par dumoulex Voir le message
    - la connexion doit passer par https, donc il faut que j'accepte le certificat lors de la connexion
    Je vois pas le rapport -_-°. Les connexions HTTPS fonctionnent comme les autres du moment que les certificats sont bons. S'ils ne sont pas bons et qu'il faut accepter les connexions quand même :
    - c'est ça qu'il aurait fallu dire,
    - du coup l'intérêt que ce soit du HTTPS, est plutôt limité.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre régulier
    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
    Points : 107
    Points
    107
    Par défaut
    désolé pour la mauvaise explication, je regarde les exemples, ca devrait aller.

    merci à toi

  7. #7
    Membre régulier
    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
    Points : 107
    Points
    107
    Par défaut
    c'est ok, merci à toi !

    le code au cas ou qqun a besoin

    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
     
     
    	SSLContext sslcontext = null;
    		SSLConnectionSocketFactory sslsf = null;
    		CredentialsProvider credsProvider = null;
     
    		sslcontext = trustAllHttpsCertificates();
    		sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
     
    		credsProvider = new BasicCredentialsProvider();
    		credsProvider.setCredentials(new AuthScope(ipDestinataire, 443),
    	                				 new UsernamePasswordCredentials(CAMERA_LOGIN, CAMERA_PWD));
     
    		CloseableHttpClient httpclient = HttpClients.custom()
    										.setSSLSocketFactory(sslsf)
    										.setDefaultCredentialsProvider(credsProvider).build();
     
     
    httpget = new HttpGet(urlString);
     
     
    httpget.setConfig(RequestConfig.custom().setLocalAddress(InetAddress.getByName(IP_ECOUTE)).setAuthenticationEnabled(true).build());
     
    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();

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

Discussions similaires

  1. Envoyer requête HTTP avec données POST
    Par Dominique49 dans le forum Services Web
    Réponses: 1
    Dernier message: 20/12/2011, 11h11
  2. Envoyer requête HTTP
    Par Arnaud F. dans le forum Développement Web en Java
    Réponses: 9
    Dernier message: 08/01/2009, 20h45
  3. HTTPService : requête HTTP envoyée vide
    Par 84mickael dans le forum Flex
    Réponses: 6
    Dernier message: 24/11/2007, 17h24
  4. Envoyer une requête HTTP
    Par Alexdezark dans le forum Langage
    Réponses: 2
    Dernier message: 24/11/2007, 16h11
  5. Envoyer une requête http et recevoir la réponse XML
    Par jlscvdb dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 26/02/2007, 17h38

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