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

Collection et Stream Java Discussion :

Envoi d'un tableau par requête POST


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut Envoi d'un tableau par requête POST
    Bonjour à tous !

    Voilà je souhaiterais envoyer un tableau par requête POST en java.
    En parcourant la FAQ je suis tombé sur ceci expliquant comment réaliser une requête POST en Java ce qui répondait à mon problème.

    J'ai juste un petit soucis c'est que la solution proposée correspondrait à un formulaire avec les paramètres suivants : {"clefA" => "valeurDeClefA", "clefB" => "valeurDeClefB"}.

    Or j'ai un formulaire avec les paramètres suivants : {"clefC" => {"clefA" => "valeurDeClefA", "clefB" => "valeurDeClefB"}}.

    J'ai essayé naïvement le code suivant :
    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
    public void doPost(String adresse){
       OutputStreamWriter writer = null;
       BufferedReader reader = null;
       try {
         //encodage des paramètres de la requête
         //Il n'y a que cette partie qui diffère de la FAQ
          String donnees = URLEncoder.encode("clefC", "UTF-8") + "={" + URLEncoder.encode("clefA", "UTF-8") +
                            "=" + URLEncoder.encode("valeurDeClefA", "UTF-8") + "&" + URLEncoder.encode("clefB", "UTF-8") +
                            "=" + URLEncoder.encode("valeurDeClefB", "UTF-8") + "}";
     
          //création de la connection
          URL url = new URL(adresse);
          URLConnection conn = url.openConnection();
          conn.setDoOutput(true);
     
          //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) {
             System.out.println(ligne);
          }
       }catch (Exception e) {
          e.printStackTrace();
       }finally{
          try{writer.close();}catch(Exception e){}
          try{reader.close();}catch(Exception e){}
       }
    }
    Sans succès...

    Ma question est donc la suivante, comment faire passer un tableau dans une requête POST en Java ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne comprend pas comment est conçus ton formulaire. En HTML ca donnerait quoi ?


    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Tout d'abord merci d'avoir pris le temps de me répondre, en HTML ça donnerait ça (code généré avec RubyOnRails) :
    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
    <!DOCTYPE html>
    <html>
    <head>
      <title>SecureSmartcardServer</title>
      <link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
    <link href="/assets/scaffolds.css?body=1" media="screen" rel="stylesheet" type="text/css" />
    <link href="/assets/sessions.css?body=1" media="screen" rel="stylesheet" type="text/css" />
    <link href="/assets/users.css?body=1" media="screen" rel="stylesheet" type="text/css" />
      <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
    <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
    <script src="/assets/sessions.js?body=1" type="text/javascript"></script>
     
    <script src="/assets/users.js?body=1" type="text/javascript"></script>
    <script src="/assets/application.js?body=1" type="text/javascript"></script>
      <meta content="authenticity_token" name="csrf-param" />
    <meta content="/gI8VQ4jTTJUeciJ1Impiz13GyNZO7dLHM/SxxDpFhU=" name="csrf-token" />
    </head>
    <body>
     
    <h1>Sign Up</h1>
     
    <form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="/gI8VQ4jTTJUeciJ1Impiz13GyNZO7dLHM/SxxDpFhU=" /></div>
    <div class="field">
    <label for="user_email">Email</label><br />
     
    <input id="user_email" name="user[email]" size="30" type="text" />
    </div>
    <div class="field">
    <label for="user_password">Password</label><br />
    <input id="user_password" name="user[password]" size="30" type="password" /><br />
    </div>
    <div class="field">
    <label for="user_password_confirmation">Confirmation</label><br />
    <input id="user_password_confirmation" name="user[password_confirmation]" size="30" type="password" />
    </div>
    <div class="actions">
    <input name="commit" type="submit" value="Sign up" />
    </div>
    </form>
    <a href="/users">Back</a>
     
     
    </body>
    </html>

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et c'est "user" que tu considères comme une structure imbriqué avec les accolades ?

    Il n'y a rien de tel en HTTP. Tu peux juste envoyer des couples clef/valeur. Même pour "user" ou la clef correspond au "name" du input, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLEncoder.encode("user[email]", "UTF-8") + "=" + URLEncoder.encode("adresse@email.com", "UTF-8") + "&"

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Merci beaucoup c'est exactement ce que je cherchais !

    Pendant que j'y suis j'ai un autre petit soucis (dois-je créer un nouveau topic ?), lorsque j'essaye d'envoyer une requête POST à mon serveur pour créer un user, le user ne se crée pas et en regardant les logs du serveur je me suis aperçu que j'avais le message d'erreur : "WARNING: Can't verify CSRF token authenticity".

    Je me suis donc dit qu'il suffisait juste de récupérer le authenticity_token à l'aide d'un GET et de l'envoyer comme paramètre dans ma requête POST, une fois de plus je fus bien naïf.

    Ma question est donc la suivante, comment faire pour que le serveur puisse vérifier le CSRF token authenticity lorsque que je lui envoi ma requête POST ?

    Merci d'avance.

Discussions similaires

  1. [Web Service][HttpRequest] Envoie de fichier par requête POST
    Par cjean dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/12/2016, 15h26
  2. Envoi d'un tableau par une requête Get
    Par 4rocky4 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/04/2011, 15h44
  3. Calendrier sous forme de tableau par requête SQL
    Par bouzinac dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/11/2008, 21h57
  4. [MySQL] Remplir un tableau par requêtes sql
    Par Melekitto dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/02/2006, 17h30
  5. Envoi d'un tableau par pipe
    Par Chicard dans le forum Développement
    Réponses: 2
    Dernier message: 10/03/2004, 09h47

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