Exécuter très facilement des requêtes HTTP (HEAD, GET, PUT, POST, DELETE) sous Android

Je vous présente pour cela ma petite classe utilitaire HttpData qui me simplifie bien la vie:

String html = new HttpData(url).get().asString();

Ou encore

JSONObject json = new HttpData("http://dns.com/api.php")
                        .header("token","xxxx")
                        .data("login", "email@mail.com")
                        // ...
                        .post().asJSONObject();

Disponible sur GitHub

Il vous suffit de télécharger la classe HttpData sur GitHub et de la copier dans un package d’utilitaires

Comment ca marche

Importer la classe
import com.kolapsis.utils.HttpData
Créer une instance
HttpData request = new HttpData("http://mondomain.com/monscript.php");

Vous pouvez passer au constructeur un client http spécifique (pour isoler vos sessions par exemple)

HttpData request = new HttpData(mHttpClient, "http://mondomain.com/monscript.php");
[Optionnel] Ajouter des entêtes
request.header("MonEntete", "MaValeur");
[Optionnel] Ajouter des données
  • au format formulaire (application/x-www-form-urlencoded)
request.data("MaVariable", "MaValeur");
  • ou encore une entité JSON
request.data(jsonData); // ou jsonData est une instance de JSONObject
[Optionnel] Ajouter un(des) fichier(s)
request.file(file); // ou file est une instance de java.io.File
Exécuter la requête

Il suffit pour cela d’appeler la méthode correspondante au verbe HTTP que vous souhaitez exécuter (ma méthode HTTP)

  • HEAD:
request.head(); // Récupère les entêtes HTTP de la réponse
  • GET:
request.get(); // Exécute une requête GET en ajoutant les filtres "data(...)" à l'URL (url?var1=value1)
  • POST:
request.post(); // Exécute une requête POST soit en "application/json" soit en "application/x-www-form-urlencoded" selon ce qui fut passé en données "data(...)"
  • PUT:
request.put(); // Exécute une requête PUT soit en "application/json" soit en "application/x-www-form-urlencoded" selon ce qui fut passé en données "data(...)"
  • DELETE:
request.get(); // Exécute une requête DELETE en ajoutant les filtres "data(...)" à l'URL (url?var1=value1)
Et récupérez le résultat sous le format qui vous plait
InputStream in = request.asInputStream();
String html = request.asString();
JSONObject json = request.asJSONObject();
Et une fois terminé vous pouvez passez le « Carbabe Collector » si le cœur vous en dit
request.consume();

Et comme vous l’avez vu en haut, vous pouvez chaîner les méthodes car (presque) toutes renvoi l’instance.

JSONObject json = new HttpData("http://dns.com/api.php")
                        .header("token","xxxx")
                        .data("login", "email@mail.com").data("pwd", "pwd")
                        .post().asJSONObject();

Vous pourrez aussi gérer les cookies, connaitre le statut de la réponse, …

7 réflexions au sujet de « Exécuter très facilement des requêtes HTTP (HEAD, GET, PUT, POST, DELETE) sous Android »

  1. dede

    Bonjour

    j ai copier la classe dans mon package a moi seulemnt j ai des erreurs comme quoi il ne reconnait pas
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;
    ainsi que toutes les classe org appach sont deprecated

    Votre aide me serait de grande utilite!

    Merci d avance!

    Répondre
    1. Benjamin Auteur de l’article

      Il faut les dépendances (lib) de package : org.apache.http.entity.mime
      La lib et téléchargeable sur le site d’apache directement
      Tu l’intègre dans ton projet et rouler jeunesse

      Répondre
  2. jo

    Bonjour
    J’ai téléchargé la classe HttpData, mais j’ai un souci dans les imports, car il ne trouve pas ces 4 éléments :
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;

    Du coup, certaines méthodes ne sont pas accessibles et la classe inutilisable en l’état.
    Voici les méthodes et les types introuvables ou inaccessibles :
    HttpMultipartMode, addPart, FileBody, StringBody

    D’avance merci pour les conseils

    Répondre
    1. Benjamin Auteur de l’article

      Il faut les dépendances (lib) de package : org.apache.http.entity.mime
      La lib et téléchargeable sur le site d’apache directement

      Répondre
  3. david

    bonjour
    cette sqolution pourrait me confvenir parfaitement ! merci
    j’ai une erreur a l’execution sur la ligne Log.i (j’ai bien entendu remplacé monurl par un lien qui fonctionne)

    try {
    String MonURL = «  »;

    HttpData request = new HttpData(MonURL);
    request.header(MonURL);
    String html = request.asString();
    Thread.sleep(600);
    Log.i(« OKOK2 », html);
    Toast.makeText(getApplicationContext(), html, Toast.LENGTH_SHORT).show();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    merci !

    Répondre
    1. Benjamin Auteur de l’article

      Hello
      La comme ça c’est dire à dire… Faudrait la pile d’erreur entière.
      Sinon attention à ta version d’Android, dans les dernières, il faut faire je ne sais plus quelle bidouille dans le graddle pour activer DefaultHttpClient, etc…
      Check aussi de bien avoir les dépendances.
      ++

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *