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

Services Web Java Discussion :

Requête POST HTTPS


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 9
    Par défaut Requête POST HTTPS
    Bonjour,
    J'essaie d'envoyer une requête POST en HTTPS à une API (vCloud, pour être précise) en suivant le tutoriel suivant : http://blog.tsugliani.fr/featured/lo...erated-cookie/
    Voici mon code (j'ai retiré l'IP, le login et le mot de passe, c'est tout) :
    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
     
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
     
    import javax.net.ssl.HttpsURLConnection;
     
    import org.apache.commons.codec.binary.Base64;
     
    public class Toto {
     
    	public static void main(String[] args) {
     
    		try {
    	    	String httpsURL = "https://1.2.3.4/cloud/org/bluage/";
    	    	URL url = new URL(httpsURL);
    	    	HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    	    	conn.setUseCaches(false);
    	    	conn.setDoInput(true);
    	    	conn.setDoOutput(true); // true indicates POST request
    	    	conn.setRequestMethod("POST");
    	    	String notEncodedCredentials = "myLogin:myPassword";
    	    	byte[] encodedCredentials = Base64.encodeBase64(notEncodedCredentials.getBytes());
    	    	conn.setRequestProperty("Authorization", "Basic " + new String(encodedCredentials));
    	    	conn.setRequestProperty("Accept", "application/*+xml;version=1.5");
     
    	    	// send post request
    	    	DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    	    	String urlParameters = "";
    	    	wr.writeBytes(urlParameters);
    	    	wr.flush();
    	    	wr.close();
     
    	    	int responseCode = conn.getResponseCode();
    	    	System.out.println("Response code: " + responseCode);
    	    	BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    	    	String inputLine;
    	    	StringBuffer response = new StringBuffer();
    	    	while ((inputLine = in.readLine()) != null) {
    	    		response.append(inputLine);
    	    	}
    	    	in.close();
    	    	// print result
    	    	System.out.println(response.toString());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Arrivé à la ligne "DataOutputStream wr = new DataOutputStream(conn.getOutputStream());" le code lance une exception e : "javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present"
    Quelle est mon erreur et comment dois-je m'y prendre pour envoyer correctement une requête POST à une API vCloud ? Merci.

  2. #2
    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 : 45
    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
    Le certificat SSL a été généré pour un nom de domaine précis, mais tu te connecte à partir de l'IP. La couche SSL est donc incapable de valider le certificat car "1.2.3.4", ce n'est pas la même chose que "ton.domaine.com". Le message te dit en gros que le certificat SSL n'a pas de nom alternatif (sous entendu, le nom principal ne correspond pas à ta requête).


    Les solution sont soit

    -> utiliser le nom domaine correct dans ta requête et pas l'ip
    -> Demander à l'admin de regénérer un nouveau certificat incluant l'adress ip dans les noms alternatifs.


    plus d'infos:
    http://stackoverflow.com/questions/1...-names-present

  3. #3
    Membre éprouvé Avatar de wiss85
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Essayez la solution ci-dessous:

    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
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    
    import javax.net.ssl.KeyManager;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
     
    import javax.net.ssl.HttpsURLConnection;
     
    import org.apache.commons.codec.binary.Base64;
     
    public class Toto {
     
    	public static void main(String[] args) {
     
    		try {
    	    	String httpsURL = "https://1.2.3.4/cloud/org/bluage/";
    	    	URL url = new URL(httpsURL);
    	    	HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    	    	conn.setUseCaches(false);
    	    	conn.setDoInput(true);
    	    	conn.setDoOutput(true); // true indicates POST request
    	    	conn.setRequestMethod("POST");
    	    	String notEncodedCredentials = "myLogin:myPassword";
    	    	byte[] encodedCredentials = Base64.encodeBase64(notEncodedCredentials.getBytes());
    	    	conn.setRequestProperty("Authorization", "Basic " + new String(encodedCredentials));
    	    	conn.setRequestProperty("Accept", "application/*+xml;version=1.5");
     
    		SSLContext ctx = SSLContext.getInstance("TLS");
    		        ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
    		        SSLContext.setDefault(ctx);
    
    	    	// send post request
    	    	DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    	    	String urlParameters = "";
    	    	wr.writeBytes(urlParameters);
    	    	wr.flush();
    	    	wr.close();
     
    	    	int responseCode = conn.getResponseCode();
    	    	System.out.println("Response code: " + responseCode);
    	    	BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    	    	String inputLine;
    	    	StringBuffer response = new StringBuffer();
    	    	while ((inputLine = in.readLine()) != null) {
    	    		response.append(inputLine);
    	    	}
    	    	in.close();
    	    	// print result
    	    	System.out.println(response.toString());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    DefaultTrustManager.java
    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
     
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.X509TrustManager
     
    public void checkClientTrusted(X509Certificate[] arg0, String arg1)
    			throws CertificateException {
    		// TODO Auto-generated method stub
     
    	}
     
     
    	public void checkServerTrusted(X509Certificate[] arg0, String arg1)
    			throws CertificateException {
    		// TODO Auto-generated method stub
     
    	}
     
     
    	public X509Certificate[] getAcceptedIssuers() {
    		// TODO Auto-generated method stub
    		return null;
    	}

Discussions similaires

  1. Problème de requête POST HTTP
    Par 2001hal dans le forum Android
    Réponses: 12
    Dernier message: 08/08/2014, 18h46
  2. Requête POST sur HTTPS
    Par zentaf dans le forum Réseau
    Réponses: 0
    Dernier message: 02/01/2014, 11h57
  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. Requête POST http C ?
    Par saladin79 dans le forum Réseau
    Réponses: 2
    Dernier message: 21/08/2008, 08h36
  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