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

Android Discussion :

Porblème https android


Sujet :

Android

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut Porblème https android
    Bonjour,

    j'accède à des scripts php avec mon application. Avec le protocole http pas de problème tout fonctionne impec, mais voila quand je passe en https cela ne marche plus.

    quelqu'un connaitrait un tutoriel ou quelque chose. j 'ai effectué les modifs fournit par la documentations google mais sans espoir.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 164
    Par défaut
    que s'affiche le Logcat ?!!!

    essaie de prolongé timeoutConnection et timeoutSocket

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Bon voilà mon code :

    Classe HTTPs :

    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
    package com.TPI.AvisTN;
     
    import android.content.Context;
    import android.util.Log;
     
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.scheme.PlainSocketFactory;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.conn.SingleClientConnManager;
    import org.apache.http.params.HttpParams;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.security.*;
     
    public class HTTPs extends DefaultHttpClient {
    	 final Context context;
    	 public HTTPs(Context context) {
    	  this.context = context;
    	 }
     
    	 @Override
    	 protected ClientConnectionManager createClientConnectionManager() {
    	  SchemeRegistry registry = new SchemeRegistry();
    	  //Pour les requêtes HTTP, on laisse la classe de base s'en occuper.
    	  registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    	  // Les requêtes HTTPS se font sur le port 443. A chaque connexion HTTPS, c’est notre keystore qui sera utilisé.
    	  registry.register(new Scheme("https", newSslSocketFactory(), 443));
    	  return new SingleClientConnManager(getParams(), registry);
    	 }
     
    	 private SSLSocketFactory newSslSocketFactory() {
    	  try {
    	  // On obtient une instance de notre KeyStore
    	  KeyStore trusted = KeyStore.getInstance("BKS");
    	  InputStream in = context.getResources().openRawResource(R.raw.my_keystore);
    	   try {
    	    // Initialisation de notre keystore. On entre le mot de passe (storepass)
    	    trusted.load(in, "p".toCharArray());
    	    } finally {
    	   in.close();
    	   }
     
    	  // Passons le keystore au SSLSocketFactory qui est responsable de la verification du certificat
    	  SSLSocketFactory sf = new SSLSocketFactory(trusted);
    	  sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
    	  return sf;
    	  } catch (Exception e) {
    	   throw new AssertionError(e);
    	  }
    	 }
    	}
    Classe EnvoiCommentaire qui appelle la classe HTTPS :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package com.TPI.AvisTN;
     
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.content.Context;
    import android.os.AsyncTask;
     
    	public class EnvoiCommentaire extends AsyncTask<String, String, Integer> {
     
    		HTTPs client;
    		HttpPost httppost;
    		InputStreamToString inputStreamToString;
     
    		Context context;
    		String avis;
     
    		public EnvoiCommentaire(Context avisTNContext, String strAvis)
    		{
    			context = avisTNContext;
    			avis = strAvis;
    		}
     
    		protected void onPreExecute(String... values) {
    		}
     
    		protected Integer doInBackground(String... values) {
    			int iResultat;
    			client = new HTTPs(context);
    	    	//HttpClient client = new DefaultHttpClient();
     
    			try {			
    				httppost = new HttpPost("https://www.xxx.com");
    			    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
     
    			    nameValuePairs.add(new BasicNameValuePair("avis", avis));
     
    			    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			    HttpResponse response = client.execute(httppost);
    			    inputStreamToString = new InputStreamToString();
    		        String jsonResult = inputStreamToString.inputStreamToString(response.getEntity().getContent()).toString();
    		        JSONObject object = new JSONObject(jsonResult);
     
    		        String ligne = object.getString("retour");
     
    			    iResultat = Integer.parseInt(ligne);
    			} catch (ClientProtocolException e) {
    				iResultat = 2;
    			} catch (IOException e) {
    				iResultat = 3;
    			} catch (JSONException e) {
    				iResultat = 4;
    			}
    			return iResultat;
    		}
    }
    Il n'y a pas d'erreur, mais lorsque que j'envoie mon commentaire, il me retourne 3 (IOException).
    Est-ce que quelqu'un pourrait me sauver ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Donc il y a bien une erreur....

    Essayez de logger les exceptions dès que celles-ci "disparaissent" (par exemple en la transformant en code retour)

    Par exemple la fonction doInBackground: peu importe le résultat, ce qui compte c'est de savoir si cela a fonctionné ou non (à noter que ClientProtocolException a fort peu de chances d'être levé vu que l'URL est construite de manière statique).

    Du coup la fonction devient quelque chose dans le style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int iResultat;
    try {
        .... 
        iResultat = ...;
    } catch (Exception ex) { // oui oui toutes les exceptions !
       Log.e("EnvoiCommentaire","Erreur de communication !",ex);
       iResultat = 2;
    }
    return iResultat;
    Et du coup, on aura quelque chose d'utilisable dans le LogCat....

    Ensuite, je ne sais pas du tout ce que fait 'InputStreamToString' (inconnu pour moi) mais vu qu'il ne prend pas en compte les données de l'entité comme le charset encoding, ou la compression, quelque chose me dit qu'il ne fait pas le boulot attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    inputStreamToString = new InputStreamToString();
    		        String jsonResult = inputStreamToString.inputStreamToString(response.getEntity().getContent()).toString();
    		        JSONObject object = new JSONObject(jsonResult);
    Ne serait-ce pas simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject object = new JSONObject(EntityUtils.toString(response.getEntity());
    ???

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Merci pour ta réponse, maintenant je sais d'où vient l'erreur :
    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
     
    05-06 15:30:20.045: E/Envoi Commentaire(8095): Envoi du commentaire
    05-06 15:30:20.045: E/Envoi Commentaire(8095): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.updateSecureConnection(DefaultClientConnectionOperator.java:231)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.conn.AbstractPoolEntry.layerProtocol(AbstractPoolEntry.java:302)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.layerProtocol(AbstractPooledConnAdapter.java:146)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.java:654)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:370)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at com.TPI.AvisTN.EnvoiCommentaire.doInBackground(EnvoiCommentaire.java:65)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at com.TPI.AvisTN.EnvoiCommentaire.doInBackground(EnvoiCommentaire.java:1)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    05-06 15:30:20.045: E/Envoi Commentaire(8095): 	at java.lang.Thread.run(Thread.java:856)
    Si jamais voilà le code de ma classe InputStreamToString que j'avais oublié de mettre avant... :
    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
     
    package com.TPI.AvisTN;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class InputStreamToString {
     
    	public StringBuilder inputStreamToString(InputStream is) {
    	    String rLine = "";
    	    StringBuilder answer = new StringBuilder();
    	    BufferedReader rd = new BufferedReader(new InputStreamReader(is));
     
    	    try {
    	     while ((rLine = rd.readLine()) != null) {
    	      answer.append(rLine);
    	       }
    	    }
     
    	    catch (IOException e) {
    	        e.printStackTrace();
    	     }
    	    return answer;
    	   }
    }
    Je vais essayer de trouver la solution à ce problème, je vous redonnerai des nouvelles mais toutes solutions sont les bienvenues !

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ouais... ben le InputStreamToString peut tout à fait être supprimé....

    et le code en passant par EntityUtils sera non seulement plus simple, moins gourmand (dans le SDK), et sera capable de décoder les streams en UTF-8 (et donc toutes les langues)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Alors j'ai fait ce que tu m'as dit ça marche merci
    Mon problème n'est toujours pas résolu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug] ssl_engine_io.c(1908): OpenSSL: I/O error, 5 bytes expected to read on BIO#b92d5488 [mem: b90efadb]
    voila l'erreur de mon serveur apache2 si cela peut t'aider

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Merci pour ta réponse

    l'erreur venait du certificat
    j'en ai crée un nouveau essai 30 jours sur symantec et çamarche !
    merci pour tout

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

Discussions similaires

  1. Requête GET HTTP Android vers un serveur WEB
    Par sk310000 dans le forum Programmation système
    Réponses: 0
    Dernier message: 30/01/2015, 18h01
  2. [WM17] Requête HTTP Android
    Par Makinator dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 09/05/2013, 12h49
  3. [WD17] Requête HTTP Android
    Par Makinator dans le forum WinDev
    Réponses: 0
    Dernier message: 09/05/2013, 12h32
  4. HTTP Android
    Par khaledfayala dans le forum Android
    Réponses: 2
    Dernier message: 04/03/2012, 13h06
  5. Android et HTTP Adaptative Streaming
    Par Cdic83 dans le forum Android
    Réponses: 2
    Dernier message: 29/06/2010, 17h24

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