Séance 3 : requête POST§

&

Département Informatique, IUT Lyon 1

Creative Commons License

Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.

1

Introduction§

2

Motivation§

Jusqu’à maintenant, nous n’avons utilisé que des requêtes de consultation (GET et HEAD).

Il est parfois nécessaire de modifier les données du serveur. C’est notamment ce qui se passe lorsqu’on utilise un formulaire HTML (par exemple pour poster un billet de blog ou passer une commande).

3

Requête POST§

4

Rappel : structure d’un formulaire§

<form action="./comment/create" method="POST">
  <label>Nom : <input name="name"></label>
  <label>Adresse mél : <input name="email"></label>
  <label>Commentaire : <textarea name="comment"></textarea></label>
  <button>Laisser un commentaire</button>
</form>

Que se passe-t-il lorsqu’on clique sur le bouton ?

5

Requête POST de formulaire§

Le navigateur envoie une requête POST à l’URL indiquée par l’attribut action. Le contenu de cette requête décrit les champs du formulaire, sous la forme suivante :

name=valeur1&email=valeur2&comment=valeur3

Ce format est identifié dans l’entête de message:

content-type: application/x-www-form-urlencoded

NB: les valeurs doivent être encodées selon un format particulier. En java, la classe java.net.URLEncoder offre cette fonctionnalité.

6

Autres formats de données§

Le type de contenu application/x-www-form-urlencoded est bien adapté pour les formulaires HTML, mais n’est pas le seul possible.

Pour les services Web destinés à être utilisés par d’autres programmes, d’autres types (comme XML ou JSON) sont utilisés.

Note

D’ailleurs, même pour les formulaires HTML, lorsqu’on souhaite téléverser un fichier, on utilise un autre type de contenu : multipart/form-data.

7

Requête POST en Java§

8

Exemple§

URL url = new URL("http://httpbin.org/post");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.addRequestProperty("content-type", "application/x-www-form-urlencoded");
conn.setDoOutput(true);
OutputStream stream = conn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream);
writer.write("hello=world&bonjour=monde");
writer.close();
conn.connect();

Note

Cet exemple est un simple test. En situation réelle, il faut construire le contenu du message de manière robuste, notamment en utilisant java.net.URLEncoder.

9

Exemple JSON§

URL url = new URL("http://httpbin.org/post");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.addRequestProperty("content-type", "application/json");
conn.setDoOutput(true);
OutputStream stream = conn.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream);
writer.write("{ \"hello\": \"world\", \"bonjour\": \"monde\" }"); //
writer.close();
conn.connect();
10

Votre travail§

11

Le contexte§

Nous allons utiliser le Blog éphémère, un service de blog minimaliste dédié à ce cours.

12

Votre travail§

Écrivez un programme qui

En commentaire de votre code, vous expliquerez le travail de rétro-ingénierie que vous aurez effectué pour pouvoir écrire ce programme (par exemple, en affichant le code source du formulaire de création, et en utilisant la console développeur de votre navigateur).

13