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

API standards et tierces Android Discussion :

Erreur "Server failed to respond with a valid HTTP response"


Sujet :

API standards et tierces Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Erreur "Server failed to respond with a valid HTTP response"
    Bonjour à tous,

    Voilà trois jours complets que je planche sur ce problème et que je n'arrive pas à le résoudre. Je m'en remets à vous.

    Je développe actuellement une application android qui me permet de communiquer avec une base de données par le biais de fichiers php sur un server.

    Je vous présente mon code qui me permet de faire cela :
    Avec XX.XX.XX.XX : adresse ip du serveur
    et YYYY : le port

    Le fichier PHP listUsersWithLogin devrait juste me renvoyer une liste d'utilisateurs avec un login semblable à 'login'

    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
     
     
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("login",login));
     
    HttpClient httpclient = new DefaultHttpClient();
     
    HttpPost("http://XX.XX.XX.XX:YYYY/listUsersWithLogin.php");
     
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     
    HttpResponse response = httpclient.execute(httppost);
     
    HttpEntity entity = response.getEntity();
    jsonText = EntityUtils.toString(entity, HTTP.UTF_8);
     
    }catch(Exception e){
    		Log.e("log_tag", "Error in http connection " + e.toString(), e);
    }
    Je précise que j'ai développé une appli PC utilisant jdbc où je n'ai aucun problème avec.
    De plus, j'ai une freebox où j'ai bien redirigé le port XXXX sur ma machine dans le réseau local.

    Je vous présente l'erreur que j'obtiens et qui me rend fou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Error in http connection org.apache.http.client.ClientProtocolException
    org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.AbstractHttpClient.execute(Abstract HttpClient.java:557)
    at org.apache.http.impl.client.AbstractHttpClient.execute(Abstract HttpClient.java:487
    at org.apache.http.impl.client.AbstractHttpClient.execute(Abstract HttpClient.java:465
    .....
    Caused by : org.apache.http.ProtocolException: Ther server failed to respond a valid HTTP response
    ....

    Voilà, j'espère de tout coeur que vous pourrez m'aider.

    J'attends avec impatience vos différents retours.

    P.S : je précise également que j'utilise WAMP. Et comme de l'ai déjà dit, le programme PC utilisant jdbc et qui fait exactement la même chose (sans fichiers php forcément) fonctionne correctement.
    De plus, lorsque je donne des adresses ip directement en local, je n'ai pas le moindre soucis.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,

    Essaye de voir comment c'est fait dans ce tuto pour commencer.

    Ensuite, nous avons besoin de savoir ce que renvoie le serveur. Si il reçoit quelque chose...

    Essaye de mettre des logs dans ton programme.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Donc en reprenant l'exemple ci-dessus.

    Je retrouve exactement la même erreur que voici :
    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
     
    11-02 13:03:11.478: E/tag1(268): org.apache.http.client.ClientProtocolException
    11-02 13:03:11.478: E/tag1(268): org.apache.http.client.ClientProtocolException
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    11-02 13:03:11.478: E/tag1(268): 	at de.demo.login.Login$3.run(Login.java:165)
    11-02 13:03:11.478: E/tag1(268): Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:93)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:219)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
    11-02 13:03:11.478: E/tag1(268): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    11-02 13:03:11.478: E/tag1(268): 	... 3 more
    C'est clairement l'instruction suivante qui pose problème et qui provoque l'erreur précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HttpResponse response = httpclient.execute(httppost);

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Peux tu m'expliquer la ligne 8 de ton code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HttpPost("http://XX.XX.XX.XX:YYYY/listUsersWithLogin.php");
    Tu devrais plutot mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    httppost = new HttpPost("http://XX.XX.XX.XX:YYYY/listUsersWithLogin.php");
    Que contient ton httppost lors de l'envoie?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Oui en fait je faisais déjà :
    HttpPost httppost = new HttpPost("http://XX.XX.XX.XX:YYYY/listUsersWithLogin.php");

    C'est un oubli dans mon code, désolé.

    Alors en fait, XX.XX.XX.XX c'est l'adresse ip de mon serveur vu par internet ( celle que j'obtiens sur http://mon-ip.com.

    Et pour YYYY : c'est le port , en l'occurence 3306 pour mon projet.

    Donc imaginons que mon adresse ip obtenue soit : 78.230.67.88, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HttpPost httppost = new HttpPost("http://78.230.67.88:3306/listUsersWithLogin.php");
    puis je fais : 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
    HttpResponse response = httpclient.execute(httppost);
    Et c'est là que j'ai l'exception.

    Mais sinon j'ai repris entièrement l'exemple que tu as donné.

    Vu que j'ai wamp, j'ai un dossier www qui contient ce fameux fichier php. (donc par exemple celui de l'exemple que tu as créé et qui m'a d'ailleurs bien aidé )

    En tout cas, merci beaucoup David55 de t'intéresser à mon problème

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Je n'ai toujours pas réglé mon problème malgré des recherches sur des forums anglais/américains.

    Personne n'a jamais rencontré ce problème ou ne peut m'aider ?

  7. #7
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    11-02 13:03:11.478: E/tag1(268): Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response
    http://hc.apache.org/httpclient-3.x/...col_exceptions

    Ton serveur est opérationnel ?

    Arrives tu à récupérer la réponse autrement que par ton application ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Oui mon serveur semble opérationnel puisque quand j'utilise un autre programme (avec seulement jdbc), je n'ai pas la moindre erreur et j'obtiens bien ce que je souhaite.

    En réalisant entièrement le tuto de David55, je retrouve exactement la même erreur ...

    Sur le lien que tu as mis Feanorin, je vois qu'on peut configurer le httpClient pour qu'il soit je cite : " plus indulgent sur ​​les violations de protocole ".

    As-tu une idée de ce qu'ils veulent dire ? Et comment le configurer pour que cela soit le cas ?

    Encore merci pour vous intéresser à ce problème.

  9. #9
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Cela n'a rien à voir avec Android, mais on dirait que tu as le même problème:
    http://www.discogs.com/help/forums/topic/228549

    Losr du parser de ton Head tu as une exception levé peut être qu'il te manque la déclaration de celle ci avant l'execute ?

    Sur ton objet httpGet tu peux les rajouter via la fonction addHeader :
    http://developer.android.com/referen...e.http.Header)

    un exemple :
    http://stackoverflow.com/questions/6...ng-http-header
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Alors voici où j'en suis avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getCredentialsProvider().setCredentials(
    	new AuthScope("http://78.230.67.88", 3306), 
    	new UsernamePasswordCredentials("Florent", "floflo"));
     
    HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 5000);
    HttpPost httppost = new HttpPost(urlOfPHP);			
     
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
    HttpResponse response = httpclient.execute(httppost);
    J'ai toujours malheureusement la même erreur.
    Cependant, je n'ai pas de header en effet à mon Objet httpPost mais si j'ai bien compris, avec ce que je viens de rajouter j'en ai pas besoin.

    De plus, je n'utilise que des httpPost et aucun httpGet.

  11. #11
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Dans eclipse il y a un outil pour "voir" les communications HTTP...
    Tu déclare ton serveur (78.230.67.88:3306) et un port local (par exemple 8888)
    Et dans ton code tu te connectes à un serveur local (localhost:8888, ou 10.0.2.2:8888 depuis l'émulateur)

    Tu verras alors les trafics HTTP, avec exactement ce qui est envoyé / reçu etc...
    Il n y'a pas de difference "majeure" en GET et POST, c'est (au niveau de HTTP en tout cas) juste le "verbe" qui change....

    Pour rappel, une requete HTTP1.1 devrait au moins avoir les headers suivants:
    * Server
    * Agent
    * Accept

    Cette erreur peut aussi se produire si on initialise une connexion TCP alors qu'une connexion SSL (ou TLS) est attendue (ce qui arrive si on met "http" au lieu de "https" avec un numéro de port alors que le port du serveur est "sécurisé").
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 10
    Points : 16
    Points
    16
    Par défaut
    Ca m'étonnerait que ton serveur web soit sur le port 3306. Habituellement c'est le port réservé à MySQL. Si tu essayes le même code sur le port 80, ça devrait fonctionner.

    Bon je sais que le thread a 2 ans, mais si quelqu'un a le même problème ça pourra servir !

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/02/2013, 18h22
  2. [AC-2010] Insert Into erreur "ODBC --Call Failed" avec un champ sql server Identify
    Par jayjazz dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/05/2011, 13h17
  3. [Continuum] Erreur svn : "Server certificate verification failed"
    Par Sikifon dans le forum Intégration Continue
    Réponses: 10
    Dernier message: 25/09/2009, 10h45
  4. Réponses: 1
    Dernier message: 16/11/2006, 11h34
  5. Réponses: 5
    Dernier message: 29/05/2006, 14h42

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