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

Entrée/Sortie Java Discussion :

HttpUrlConnection URLConnectionComent envoyer les donnés avec POST ou autre method


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut HttpUrlConnection URLConnectionComent envoyer les donnés avec POST ou autre method
    Bonjour,

    J'aimerai récupérer le résultat d'une requête via un site web. je sais me connecter et afficher le contenue html, mon soucie et de récupérer la réponse après l'envoie des donné.

    ex: un formulaire de recherche qui contient le champ "nom", je veux savoire comment faire pour envoyé la donné 'nom'.

    ex résultat dune recherche sur google
    comment construire et aménager les différents donnée de la requette afin de l'envoyé.
    je trouve pas un exemple concret,
    j'aimerai bien avoir un petit exemple d'un site n'import.

    merci d'vance

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Si tu veux accéder à une ressource sur Internet en utilisant la méthode GET du protocole HTTP, il n'y a rien de plus simple, puisque l'envoi se fait directement lors de la création de la connexion.

    Par exemple, si tu veux envoyer au script test.php la variable "nom", il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    URL url = new URL("http://mydomain/test.php?nom=dupont");
    HttpURLConnection connexion = (HttpURLConnection) url.openConnection();
    Cette commande suffit à envoyer des données grâce à la méthode GET (qui est le méthode par défaut d'un URLConnection)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Pour envoyer la même chose grâce à la méthode POST du protocole HTTP, c'est un peu plus complexe, puisqu'il faut envoyer en plus un contenu.

    Par exemple, pour envoyer la variable "nom" au même script test.php, tu dois d'abord configurer ta connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    URL url = new URL("http://mydomain/test.php");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true); // Pour pouvoir envoyer des données
    connection.setRequestMethod("POST");
    Puis il faut ensuite envoyer le contenu qui est une String : "nom=dupont", en écrivant dans le flux sortant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
    writer.write("nom=dupont");
    writer.flush();
    Voilà. Si tu as plusieurs variables, la chaîne c'est : "nom=truc&prenom=machin".

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Merci pour vos réponses,

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut cas special
    enfait ça marche sans problème seulement, je tombe sur un cas particulier,
    pour www.annu.fr je veux récupérer tous les résultat pour prenom=jeanne et le dep=44.
    par la page web ça marche, mais via mon code java, ça marche pas,
    les variable transmis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       String data="&nom=&ville=&prenom=jeanne&dep=44";
    par contre si je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String data="&nom=jeanne&ville=&prenom=&dep=44";
    ça marche. mais moi je veux avoir la liste des gens dont le prenom=jeanne et non le nom.
    si ça marche via explorer ou firefox, ça doit marché avec mon appli java non!
    je suis vraiment en galère, aidez moi svp
    Merci,

  7. #7
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    il se peut qu'il manque des champs... comme country ou type
    Bien le bonjour chez vous
    Jowo

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    As tu essayé de ne spécifier que les paramètres que tu renseignes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String data="prenom=jeanne&dep=44";
    Citation Envoyé par death_style Voir le message
    enfait ça marche sans problème seulement, je tombe sur un cas particulier,
    pour www.annu.fr je veux récupérer tous les résultat pour prenom=jeanne et le dep=44.
    par la page web ça marche, mais via mon code java, ça marche pas,
    les variable transmis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       String data="&nom=&ville=&prenom=jeanne&dep=44";
    par contre si je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String data="&nom=jeanne&ville=&prenom=&dep=44";
    ça marche. mais moi je veux avoir la liste des gens dont le prenom=jeanne et non le nom.
    si ça marche via explorer ou firefox, ça doit marché avec mon appli java non!
    je suis vraiment en galère, aidez moi svp
    Merci,
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Oui justement et ça marche toujours pas,
    voici le code pour annu biensur:

    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
     
    public static String post(String adresse, String donnees){
            String a="";
            int idex=0;
             OutputStreamWriter writer = null;
             BufferedReader reader = null;
               try {
                   a = "";
                  //création de la connection
                  URL url = new URL(adresse);
                  URLConnection conn = url.openConnection();
                  conn.setDoOutput(true);
                 // System.out.println(conn.getURL());
                  //envoi de la requête
                  writer = new OutputStreamWriter(conn.getOutputStream());
                  writer.write(donnees);
                  writer.flush();
                  //lecture de la réponse
                  reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                  String ligne;
                  while ((ligne = reader.readLine()) != null) {
                      a += ligne;
                  }
     
               }catch (Exception e) {
                  e.printStackTrace();
               }finally{
                  try{writer.close();}catch(Exception e){}
                  try{reader.close();}catch(Exception e){}
               }
               return a;
        }
    Et voici comment je fait l'appelle de la fonction post dans de main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     String adr="http://www.annu.com/cgi-bin/www.cgi";
            String don="&nom=&ville=&prenom=jeanne&dep=44";
     
            String result=post(adr,don);
    je ne sais pas pourquoi ça marche pas pour "prenom" seulement.

    Biensur ça renvoi un contenue html, mais il contient pas les resultat
    alors que dans l navigateur ça marche nikel

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Le plus facile est d'utiliser un proxy en local pour analyser ce qu'envoie et reçoit ton navigateur. Tu pourras ensuite faire la même chose dans ton appli.
    Par exemple, dans le cas de www.annu.fr, les données sont en POST, non en GET via le navigateur. Voici ce qu'envoie le navigateur :
    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
    POST /cgi-bin/www.cgi HTTP/1.1
    Host: www.annu.fr
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Referer: http://www.annu.fr/
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 119
    Connection: keep-alive
     
    Posting 119 bytes...
    country=fr
    type=%23%23type%23%23
    rub=
    info=particulier
    nom=
    ville=
    prenom=jeanne
    adresse=
    dep=44
    submit.x=31
    submit.y=7
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    C'est résolu, ça marche,
    Merci dinobogan,
    en fait j'ai utilisé le résultat que tu m'as envoyé, j'ai ajouté toutes les variables cité de ton proxy de la manière suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String don="&country=fr&type=%23%23type%23%23&rub=&info=particulier&nom=&ville=&prenom=jeanne&adresse=&dep=44&submit.x=31&submit.y=7";
    Et ça marche.

    Moi j'utilisais un plug-in pour fireFox , pour affichier les en têtes HTTP, il affiche quelques lignes comme la méthode et les header, mais pas les variables envoyées.

    Merci.

  12. #12
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Citation Envoyé par jowo Voir le message
    Bonjour,

    il se peut qu'il manque des champs... comme country ou type
    Pourtant je te l'avais écrit qu'il manquait des champs. Pas besoin d'un proxy (on ne sort pas le canon pour tuer une mouche), il suffit d'examiner le code source HTML du formulaire pour connaître la méthode à utiliser et les champs à envoyer...
    Bien le bonjour chez vous
    Jowo

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    lol desolé, c'est vrais mais si on regarde le code du formulaire, y a pas toutes les variables.
    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
    <form method="post" action="/cgi-bin/www.cgi">
                    <input type="hidden" name="country" value="fr">
                    <input type="hidden" name="type" value="##type##">
                    <input type="hidden" name="rub" value="">
                    <input type="hidden" name="info" value="particulier">
     
                    <tr> 
                      <td class="txtbld">Nom</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="nom" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txtbld">Ville</td>
     
                      <td align="center" colspan="2"> 
                        <input type="text" name="ville" size="29">
                      </td>
                      <td> <span class="txt"><img src="/images/onglets/main_guide.gif" width="22" height="19"><a href="/cgi-bin/regdep.cgi?type=ville&amp;info=particulier">l'index</a></span></td>
                    </tr>
                    <tr> 
                      <td colspan="4" align="center" class="txt">Vous pouvez affiner 
                        votre recherche </td>
                    </tr>
     
                    <tr> 
                      <td class="txt">Pr&eacute;nom</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="prenom" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txt">Adresse</td>
     
                      <td align="center" colspan="2"> 
                        <input type="text" name="adresse" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txt">D&eacute;partement</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="dep" size="29">
     
                      </td>
                      <td> <span class="txt"><img src="/images/onglets/main_guide.gif" width="22" height="19"><a href="/cgi-bin/regdep.cgi?type=dep&amp;info=particulier">l'index</a></span></td>
                    </tr>
                    <tr> 
                      <td>&nbsp;</td>
                      <td align="right" valign="middle"> <span class="smtxt"><a href="annu_fr/aide_fr.html">Consulter 
                        l'aide</a></span> </td>
                      <td align="left" valign="top"> 
                        <input type="image" border="0" name="submit" width="71" height="17" alt="cliquez ici pour lancer votre recherche" src="/images/btn_rechercher_fr.gif">
     
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                  </form>
    Il sont ou les &submit.x=31&submit.y=7, en tous cas moi je les vois pas.

  14. #14
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Citation Envoyé par death_style Voir le message
    lol desolé, c'est vrais mais si on regarde le code du formulaire, y a pas toutes les variables.
    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
    <form method="post" action="/cgi-bin/www.cgi">
                    <input type="hidden" name="country" value="fr">
                    <input type="hidden" name="type" value="##type##">
                    <input type="hidden" name="rub" value="">
                    <input type="hidden" name="info" value="particulier">
     
                    <tr> 
                      <td class="txtbld">Nom</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="nom" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txtbld">Ville</td>
     
                      <td align="center" colspan="2"> 
                        <input type="text" name="ville" size="29">
                      </td>
                      <td> <span class="txt"><img src="/images/onglets/main_guide.gif" width="22" height="19"><a href="/cgi-bin/regdep.cgi?type=ville&amp;info=particulier">l'index</a></span></td>
                    </tr>
                    <tr> 
                      <td colspan="4" align="center" class="txt">Vous pouvez affiner 
                        votre recherche </td>
                    </tr>
     
                    <tr> 
                      <td class="txt">Pr&eacute;nom</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="prenom" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txt">Adresse</td>
     
                      <td align="center" colspan="2"> 
                        <input type="text" name="adresse" size="29">
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                    <tr> 
                      <td class="txt">D&eacute;partement</td>
                      <td align="center" colspan="2"> 
                        <input type="text" name="dep" size="29">
     
                      </td>
                      <td> <span class="txt"><img src="/images/onglets/main_guide.gif" width="22" height="19"><a href="/cgi-bin/regdep.cgi?type=dep&amp;info=particulier">l'index</a></span></td>
                    </tr>
                    <tr> 
                      <td>&nbsp;</td>
                      <td align="right" valign="middle"> <span class="smtxt"><a href="annu_fr/aide_fr.html">Consulter 
                        l'aide</a></span> </td>
                      <td align="left" valign="top"> 
                        <input type="image" border="0" name="submit" width="71" height="17" alt="cliquez ici pour lancer votre recherche" src="/images/btn_rechercher_fr.gif">
     
                      </td>
                      <td>&nbsp;</td>
                    </tr>
                  </form>
    Il sont ou les &submit.x=31&submit.y=7, en tous cas moi je les vois pas.
    Moi, je le vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="image" border="0" name="submit" width="71" height="17" alt="cliquez ici pour lancer votre recherche" src="/images/btn_rechercher_fr.gif">
    "submit.x=31&submit.y=7" indique que tu as cliqué (avec la souris) sur la coordonnée x=31 et y=7 du bouton.

    Tu peux mettre ces valeurs à 0 (indiquant que tu as utilisé le clavier) ou voire les supprimer. Je ne pense pas qu'ils ont poussé le vice jusqu'à tester la présence de deux variables mais on ne sait jamais
    Bien le bonjour chez vous
    Jowo

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Alors là, je dois vraiment changer d'opticien, bref
    Donc cela confirme que tout est dans e formulaire et un proxy local n'est pas nécessaire.
    Merci jowo

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2015, 22h07
  2. envoyer et recevoir les données avec les sockets
    Par thejavator dans le forum Langage
    Réponses: 8
    Dernier message: 11/02/2014, 22h29
  3. Réponses: 1
    Dernier message: 10/03/2013, 13h31
  4. Envoyer les données de plusieurs forms avec un autre formulaire
    Par malgache dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/10/2011, 17h15
  5. Envoyer des données en POST avec JQuery?
    Par john85 dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 09/06/2011, 18h33

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