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 :

Envoie d'un Json en URL


Sujet :

Android

  1. #1
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut Envoie d'un Json en URL
    Bonjour,

    Je n'arrive pas a comprendre comment envoyer un json dans l'url avec la méthode POST .
    Je n'ais pas de problèmes avec une string classique mais pour une String json ( de ce format : {"nom":"dow","prenom":"john"} ) l'url n'envoie rien à part ce qui précède le json ..

    voilà ce qui est envoyé : http://exemple.com/exemple1/inscription?json= (dans les logs je vois bien mon json a coté de l'url mais il n'est pas pris en compte dans celle ci ..)

    voilà ce que je veux envoyer : http://exemple.com/exemple1/inscription?json={"nom":"dow","prenom":"john"}

    voici mon code :

    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
    String data = "inscription?" + "json"
                        + "=" + json_gen; // json_gen est de type JSONObject
                System.out.println(data);
                String addr = "http://exemple.com/exemple1/app/" + data; //l'url est a titre indicatif ce n'est pas la vrai
                addr.replaceAll(" ", "%20");
                URL url = new URL(addr);
     
                HttpURLConnection co = (HttpURLConnection) url.openConnection();
                co.setDoInput(true);
                co.setDoOutput(true);
                co.setRequestMethod("POST");
                co.addRequestProperty("Accept", "application/json");
                co.addRequestProperty("Content-Type", "application/json");
                System.out.println("co :: " + co);
                co.setReadTimeout(10000);
                co.setConnectTimeout(15000);
                co.connect();
     
                // Ces quatre lignes ont elles vraiment un effet ...?
                DataOutputStream printout = new DataOutputStream(co.getOutputStream());  
                printout.writeBytes(URLEncoder.encode(json_gen.toString(), "UTF-8"));
                printout.flush();
                printout.close();
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,

    la manière dont tu prépares ta requête n'est pas appropriée pour l'envoyer avec POST. Tu concatènes l'url et la donnée à envoyer. Avec ça, serait mieux d'utiliser GET.


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Merci pour la réponse, mais le fait d'utiliser GET m'apporte exactement la même erreur ..

    seul l'url est utilisé , mon json n'est pas présent dans l'url a partir du {

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par awesomeman Voir le message
    Merci pour la réponse, mais le fait d'utiliser GET m'apporte exactement la même erreur ..

    seul l'url est utilisé , mon json n'est pas présent dans l'url a partir du {
    Le problème se situe du côté réception peut être. Tu dois dire à ton serveur (contrôleur) que "Petit, la donnée que tu attends c'est du JSON". On parle de format d'échange dans ce cas (Je suppose. Je me réserve de toute confirmation car problème pas encore rencontré).


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Hello,

    Citation Envoyé par awesomeman Voir le message
    seul l'url est utilisé , mon json n'est pas présent dans l'url a partir du {
    Je dirais que le plus important, c'est d'abord d'expliquer comment tu saurais ça.
    En gros qu'est-ce que tu as vu ?

    Je suis désolé mais en regardant ton téléphone, tu ne risques pas de savoir si oui ou non ton json est présent dans l'URL.
    Sauf si on parles de l'URL que tu as tapé avec tes mimines, là il suffit de regarder ce que tu viens de taper. Mais oui il est bien présent, puisque tu viens de le taper.

    Donc qu'est-ce qui te fait penser le contraire ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Novembre 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Novembre 2014
    Messages : 67
    Points : 86
    Points
    86
    Par défaut
    Salut,

    Cette solution devrait fonctionner :

    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
     
                //Tu crées ton client
                HttpClient httpclient = new DefaultHttpClient();
     
                // Idem pour ta requête POST avec ton URL
                HttpPost httpPost = new HttpPost(url);
     
     
                // Tu convertis ton JSON en StringEntity
                StringEntity se = new StringEntity(json_gen.toString());
     
                //Que tu places dans ton objet de requête POST
                httpPost.setEntity(se);
     
                // Les header pour prévenir le serveur que tu balances du JSON
                httpPost.setHeader("Accept", "application/json");
                httpPost.setHeader("Content-type", "application/json");
     
                // Execution
                HttpResponse httpResponse = httpclient.execute(httpPost);
     
                //Réponse
                inputStream = httpResponse.getEntity().getContent();
     
                // Conversion en string de la réponse
                if(inputStream != null)
                    result = convertInputStreamToString(inputStream);
                else
                    result = "Did not work!";

    Source : http://hmkcode.com/android-send-json-data-to-server/

  7. #7
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,



    Je dirais que le plus important, c'est d'abord d'expliquer comment tu saurais ça.
    En gros qu'est-ce que tu as vu ?

    Je suis désolé mais en regardant ton téléphone, tu ne risques pas de savoir si oui ou non ton json est présent dans l'URL.
    Sauf si on parles de l'URL que tu as tapé avec tes mimines, là il suffit de regarder ce que tu viens de taper. Mais oui il est bien présent, puisque tu viens de le taper.

    Donc qu'est-ce qui te fait penser le contraire ?
    Je crois que j'ai mal exprimé le problème . Cette URL dont je parle c'est : adresse à laquelle j'envoie ma requete (comme http://example.com/machin/app/) + mon json avec ce format (inscription?json{"nom":"dow","prenom":"john"})

    J'ai l'impression que ce fameux + ne se fait pas entre l'adresse et le json , pourquoi je pense ca ? parce que mon println me print ca:
    http://exemple.com/exemple1/inscription?json={"nom":"dow","prenom":"john"}
    alors qu'il devrait me print ca:
    http://exemple.com/exemple1/inscript...renom":"john"}

    De plus le reponse du serveur est clair , il me dit que je n'ai rien passé en paramètre .. c'est donc bien la preuve que le json n'est pas comprit dans l'url .

  8. #8
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par IronRabbit Voir le message
    Salut,

    Cette solution devrait fonctionner
    Non ca ne marchera pas, HttpClient est deprecated mais merci quand meme !

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par awesomeman Voir le message
    J'ai l'impression que ce fameux + ne se fait pas entre l'adresse et le json , pourquoi je pense ca ? parce que mon println me print ca:
    Je t'avoue que la différence entre les deux ne me semble pas de la plus extrême évidence. Peut-être que tu pourrais nous pointer du doigt ce qu'il y a à regarder ?

    Citation Envoyé par awesomeman Voir le message
    De plus le reponse du serveur est clair , il me dit que je n'ai rien passé en paramètre .. c'est donc bien la preuve que le json n'est pas comprit dans l'url .
    Euh, alors peut-être que je l'ai pas dit assez clairement la première fois, mais la question importante c'est comment tu saurais ça ?
    Qu'est-ce qui lui prend, au serveur, pour avoir l'initiative de te dire que tu n'as rien passé en paramètre ?
    De quelle manière t'y prends-tu pour lui demander "hé, au fait, j'ai passé quelque chose en paramètre" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Bonsoir,

    Je sais que rien n'est passé en paramètre puisque le coté serveur que j'ai codé renvoie "~" . C'est ce qui est renvoyé lorsque rien n'est passé en paramètre dans l'URL et la c'est le cas ..

    Bref je pense changer de technique, passer un json (surtout quand il est long) en URL est une mauvaise idée ..
    Qu'existe t il comme autres méthodes pour envoyer un json ?

    Merci pour les réponses

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il n'y a normalement aucun problème pour passer du json en paramètre dans une URL, hormis effectivement la taille maximal d'URL qui risque d'être dépassée en cas de long json. Cela peut être contourné en POST, avec le paramètre dans les headers. L'autre solution est de passer le json dans le body.

    Citation Envoyé par awesomeman Voir le message
    parce que mon println me print ca:
    http://exemple.com/exemple1/inscription?json={"nom":"dow","prenom":"john"}
    alors qu'il devrait me print ca:
    http://exemple.com/exemple1/inscription?json={"nom":"dow","prenom":"john"}
    Et c'est quoi la différence entre les deux ?

    En revanche, addr.replaceAll(" ", "%20"); n'est pas suffisant pour échapper une valeur de paramètre. Le json que tu donnes en exemple devrait être encodé comme ça : %7B%22nom%22%3A%22dow%22%2C%22prenom%22%3A%22john%22%7D

    URLEncoder.encode( json_gen, "UTF-8")
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par awesomeman Voir le message
    Je sais que rien n'est passé en paramètre puisque le coté serveur que j'ai codé renvoie "~" . C'est ce qui est renvoyé lorsque rien n'est passé en paramètre dans l'URL et la c'est le cas ..
    Donc en fait tu sais pas du tout comment fonctionne le serveur ? L'idée de faire un paramètre json= c'est quelque chose que tu as inventé comme ça, sans raison de penser que ça aurait dû être data= ou autre chose ?

    Citation Envoyé par awesomeman Voir le message
    Bref je pense changer de technique, passer un json (surtout quand il est long) en URL est une mauvaise idée ..
    Qu'existe t il comme autres méthodes pour envoyer un json ?
    Je confirme. Il n'y a pas de question d'"autre" méthode.
    Un JSON ça s'envoie sous forme d'entity body, avec Content-Type: application/json, et sans URLEncoder bien entendu. Un point c'est tout. Ça ne s'envoie pas dans l'URL.
    Bien sûr si tu inventes ton propre serveur tu fais ce que tu veux avec et tu peux bien lui mettre une gestion du JSON dans l'URL. Mais si c'est quelqu'un d'autre qui a fait le serveur, tu peux te dire tout de suite que ça marche pas comme ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Il n'y a normalement aucun problème pour passer du json en paramètre dans une URL, hormis effectivement la taille maximal d'URL qui risque d'être dépassée en cas de long json. Cela peut être contourné en POST, avec le paramètre dans les headers. L'autre solution est de passer le json dans le body.


    Et c'est quoi la différence entre les deux ?
    la différence est que l'un des deux n'est plus considéré comme une url à partir du { sinon oui en tant que string ce sont évidement les même . Merci pour ces précisions , je vais passer par le body .

    Citation Envoyé par thelvin Voir le message

    Un JSON ça s'envoie sous forme d'entity body, avec Content-Type: application/json, et sans URLEncoder bien entendu. Un point c'est tout. Ça ne s'envoie pas dans l'URL.
    D'accord, je vais donc faire ca . c'est vrai que passer un grand json en URL ca n'a pas vraiment de sens .. (on va dire que c'est une erreur de débutant ) . encore merci , bonne journée

Discussions similaires

  1. [AJAX] d'envoi d'un JSON a php
    Par DeeVoiD dans le forum AJAX
    Réponses: 1
    Dernier message: 09/04/2009, 15h46
  2. [MySQL] Envoi de variable dans l'URL (2e partie)
    Par bonomsoleil dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/12/2008, 20h47
  3. Envoi et récupération xml via url
    Par eidole62 dans le forum SQL
    Réponses: 1
    Dernier message: 22/11/2007, 12h29
  4. Problème d'envoie de variables dans une url
    Par xenos dans le forum Langage
    Réponses: 9
    Dernier message: 29/11/2006, 00h48
  5. envoi de variable par l'url...
    Par Empty_body dans le forum Langage
    Réponses: 7
    Dernier message: 11/01/2006, 21h08

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