Requête HTTP POST
De FrAndroid - Android docs.
Nous allons voir dans ce tutoriel comment envoyer une requête HTTP POST vers par exemple un script PHP que vous aurez mis en place.
Sommaire |
Charger les classes dont nous avons besoin
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
Construction de la requête
Pour construire la requête POST, nous allons créer un objet org.apache.http.client.methods.HttpPost . Pour de plus amples informations à propos de cet objet, consultez la documentation.
Dans cet exemple, nous allons utiliser le constructeur HttpPost(String uri) qui prend en paramètre une chaine de caractères décrivant l'URL de votre cible.
HttpPost httppost = new HttpPost("http://www.monsite.fr/monscript.php");
Maintenant, nous allons joindre à la requête des paramètres. Pour cela nous allons utiliser un objet une Liste de org.apache.http.NameValuePair. NameValuePair est une simple classe permettant d'encapsuler un couple de nom/valeur. C'est un classe abstraite, vous pouvez donc écrire une classe qui en dérive selon vos besoins, ou alors utiliser une de ses classes filles : org.apache.http.message.BasicNameValuePair.
Tout d'abord nous allons instancier une liste de NameValuePair puis nous allons y rajouter des éléments.
Nous allons créer un BasicNameValuePair (ou une instance d'un autre dérivé de NameValuePair) pour chaque paramètre à envoyer par la requête puis la rajouter à notre liste grâce au constructeur BasicNameValuePair(String name, String value)
Par exemple si je veux envoyer deux paramètres nom et age de valeurs respectivement Moons et 21 :
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); //On crée la liste qui contiendra tous nos paramètres
//Et on y rajoute nos paramétresnameValuePairs.add(new BasicNameValuePair("nom", "Moons"));
nameValuePairs.add(new BasicNameValuePair("age", "21"));
Enfin, on lie la liste de paramètres à l'instance de HttpPost créée précedemment.
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Envoyer la requête
On envoie la requête grâce à un objet de type org.apache.http.client.HttpClient. Nous prenderons ici un dérivé de HttpClient : DefaultHttpClient
HttpClient httpclient = new DefaultHttpClient();
httpclient.execute(httppost); //Voila, la requête est envoyée
Intercepter les exceptions
Des erreurs peuvent intervenir pendant la construction ou l'envoi de la requête.
N'oubliez surtout pas d'intercepter les exceptions suivantes java.io.IOException et org.apache.http.client.ClientProtocolException
Récupérer la réponse de la requête
Selon vos besoins, vous pourriez avoir besoin de récupérer la réponse à la requête envoyée. C'est trés simple, il suffit de passer par une instance de org.apache.http.HttpResponse pour récuperer un java.io.BufferedReader
N'oublions donc pas de charger les classes nécessaires:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
Il faut ensuite modifier un peu le code plus haut, en récupérant une instance de HttpResponse à partir de la méthode HttpClient.execute(HttpUriRequest request)
HttpResponse response=httpclient.execute(httppost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
Il suffit ensuite de lire depuis notre BufferedReader: consultez la documentation.
Si vous ne devez lire qu'une ligne, la ligne de code suivante devrait suffir:
String s = reader.readLine();
