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

Java Discussion :

Creation d'une requête de type POST


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut Creation d'une requête de type POST
    Bonjour à tous,
    En fait je cherche à créer une requête de type POST dont le contenu doit avoir un certain format afin d’interroger un serveur mais j'y arrive pas.

    Voici le format du contenu de la requête :
    1. un Long
    2. un Int et
    3. une chaîne au format JSON encodée en UTF-8


    et voilà ce que j'ai tenté :

    Code java : 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
     
                                    SocketChannel sc = SocketChannel.open();
    		                sc.connect(new InetSocketAddress("adresse du serveur", port));
                                    Charset acii = Charset.forName("ASCII");
     
                                    String chaineToPost = "{\n" 
                                                    + " \"Id\"" + ":" + " " + "\"" + "1000" + "\",\n"
    		        			+ " \"Version\"" + ":" + " " + "\"" + "1.0" + "\",\n"
    				        	+ " \"url\"" + ":" + " " + "\"" + "adresse du server" + "\",\n"
    						+ " \"classe\"" + ":" + " " + "\"" + "object" + "\",\n"
    					        + " \"num\"" + ":" + "	" + "\"" + "100" + "\",\n"
    						+ " \"Clien\"" + ":" + " " + "\"" + "nomClient" + "\",\n"
    						+ " \"reponse\"" + ":" + " " + "ok" + "\n"
    						+ "}";
    		        	String post = "POST HTTP/1.1\r\n"
    		        			+ "Host: adresse du server\r\n"
    		        			+ "Content-Type: application/json\r\n"
    		        			+ "Content-Length: 2000\r\n"
    		        			+ "\r\n";
    		        	ByteBuffer bf = ByteBuffer.allocate(1024);
    		        	bf.put(acii.encode(post));
    		        	bf.putLong(120);
    		        	bf.put(acii.encode("\r\n"));
    		        	bf.putInt(65);
    		        	bf.put(acii.encode("\r\n"));
    		        	bf.put(Charset.forName("UTF-8").encode(chaineToPost));
    		        	bf.put(acii.encode("\r\n"));
    		        	bf.put(acii.encode("\r\n"));
                                    bf.flip();
    		        	sc.write(bf);
    Après l'envoi de la requête j'essaie de lire la réponse du serveur mais je reçois rien.Donc je conclue que c'est ma requête qui est mal faite puisque j'ai essayé avec "GET" et ça a marché.
    Merci d'avance!

  2. #2
    Modérateur

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

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

    Ben, tu peux pas envoyer Content-Length: 2000 comme ça, hein... Forcément le serveur va les attendre les 2000 octets.
    Il faut fournir le nombre exacts d'octets. Tu pourrais l'obtenir en mettant le contenu dans un premier ByteBuffer, puis ensuite seulement faire la requête au complet.

    Je trouve aussi ça super bizarre, cette idée de mettre un Long et un Int au début de la requête.
    HTTP ne l'interdit pas particulièrement, mais d'un autre côté tu mets Content-Type: application/json. Si t'as des octets bruts au début ce n'est pas du tout du JSON...
    Cela dit, ça ne devrait pas empêcher le serveur de recevoir la requête, ça devrait juste déclencher une erreur dans le parseur JSON.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Salut,

    Citation Envoyé par thelvin Voir le message
    mais d'un autre côté tu mets Content-Type: application/json. Si t'as des octets bruts au début ce n'est pas du tout du JSON...
    En fait, ça été spécifié dans l'énoncé que le contenu de la requête devrait contenir un Long,un Int et une chaine au format JSON en UTF-8.Moi même ça m'a paru un peu bizarre mais après quelques réflexions,je me suis dit il se peut que une fois la requête reçu,le serveur s'occupe de la décomposer afin de retrouver une chaine JSON.

    Citation Envoyé par thelvin Voir le message
    Cela dit, ça ne devrait pas empêcher le serveur de recevoir la requête, ça devrait juste déclencher une erreur dans le parseur JSON.
    J'aimerai savoir si en recevant une requête POST est-ce que le serveur envoi une réponse au client.Si oui est-ce que le format de la réponse à POST est le même que celui de GET sinon quel est le format de la réponse à POST?

    Une dernière question après chaque élément ajouté dans la requête POST(dans mon cas Long,Int et chaine JSON) il faut obligatoirement ajouté un retour à la ligne?et terminé l'ajout des éléments par une ligne vide?

    Merci d'avance!

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Kasko Voir le message
    Moi même ça m'a paru un peu bizarre mais après quelques réflexions,je me suis dit il se peut que une fois la requête reçu,le serveur s'occupe de la décomposer afin de retrouver une chaine JSON.
    On peut tout imaginer, mais quand ça part dans les plans foireux comme ça il vaut mieux se dire qu'on a zappé un truc. Je demanderais plutôt à quoi il pensait à l'auteur de l'énoncé.



    Citation Envoyé par Kasko Voir le message
    J'aimerai savoir si en recevant une requête POST est-ce que le serveur envoi une réponse au client.
    Oui. Au minimum il faut au moins avoir une idée que ça a été reçu et traité, et genre si ça a plutôt marché ou raté.

    C'est indispensable pour que le client et le serveur sachent qu'ils se sont pas complètement désynchronisés dans la communication, genre le client continue d'envoyer une dizaine de requêtes alors que le serveur pense qu'il est encore en train de lire la première.

    Citation Envoyé par Kasko Voir le message
    Si oui est-ce que le format de la réponse à POST est le même que celui de GET sinon quel est le format de la réponse à POST?
    Tout le monde fait ce qu'il veut, le web est un pays libre. En général les réponses sont toujours dans le même format sauf lorsque changer de format est nécessaire (genre la plupart des réponses sont en XML, mais si la requête demande une photo on renvoie un fichier jpeg et pas du XML, évidemment.)

    Citation Envoyé par Kasko Voir le message
    Une dernière question après chaque élément ajouté dans la requête POST(dans mon cas Long,Int et chaine JSON) il faut obligatoirement ajouté un retour à la ligne?et terminé l'ajout des éléments par une ligne vide?
    Le truc c'est que "ajouter des éléments dans la requête POST", ça n'existe pas. Si ton POST envoie une requête JSON, dedans il y a un et un seul JSON. S'il envoie du XML, il y a un et un seul XML. Si c'est du formulaire, un et un seul formulaire.

    Sauf dans le cas complexe où tu cherches réellement à envoyer plusieurs entités distinctes au format multipart. Auquel cas, la requête doit respecter le format multipart et c'est un peu plus compliqué que juste ajouter des lignes. Ça ne s'improvise pas en claquant des doigts. Il faut lire la RFC correspondante et respecter le format à la lettre.

    ... Ou juste utiliser une bibliothèque client HTTP qui s'en occupe pour toi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Sécurité] interception d'une requête HTTP en POST
    Par olive_le_malin dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2007, 18h00
  2. creation d'une requête
    Par Sangoku dans le forum WebDev
    Réponses: 1
    Dernier message: 08/06/2007, 15h40
  3. Comment faire une requête de type spatiale
    Par sohm dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/02/2007, 08h50
  4. [MySQL] Connaitre le nombre de "rows" dans une requête de type SELECT ?
    Par dagra dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/11/2006, 22h44
  5. Réponses: 2
    Dernier message: 02/03/2006, 11h57

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