Aller au contenu

Maîtrisez la commande Httpie

Mise à jour :

HTTPie est un client HTTP en ligne de commande conçu pour simplifier les interactions avec les API RESTful. Contrairement à des outils comme curl, il mise sur une syntaxe claire, une sortie colorée et un support natif du JSON, rendant les échanges plus lisibles et faciles à déboguer. Que ce soit pour tester rapidement une API, envoyer des requêtes avec authentification ou automatiser des vérifications dans un script, HTTPie est un allié précieux pour les administrateurs systèmes et les développeurs.

Installation de HTTPie

HTTPie peut être installé sur la plupart des systèmes d’exploitation, que ce soit Linux, macOS ou Windows. Voici les différentes méthodes recommandées.

Sur Linux

Sur Debian, Ubuntu et dérivés :

Terminal window
sudo apt update
sudo apt install httpie

Sur Fedora :

Terminal window
sudo dnf install httpie

Sur Arch Linux :

Terminal window
sudo pacman -S httpie

Sur macOS

Avec Homebrew, l’installation est rapide :

Terminal window
brew install httpie

Sur Windows

Utilisez choco (Chocolatey) :

Terminal window
choco install httpie

Ou scoop :

Terminal window
scoop install httpie

Méthode universelle avec pip

Si vous avez Python installé, utilisez pip :

Terminal window
pip install --upgrade httpie

Vérifiez ensuite que tout fonctionne :

Terminal window
http --version

Cette commande doit renvoyer le numéro de version de HTTPie, prouvant que l’installation est réussie.

Syntaxe de base et requêtes simples

Pour illustrer la syntaxe de base de HTTPie, nous allons utiliser l’API de test gratuite JSONPlaceholder, souvent utilisée pour simuler des requêtes HTTP.

Requête GET simple

Pour récupérer la liste des posts :

Terminal window
http https://jsonplaceholder.typicode.com/posts

Pour récupérer un post spécifique (par exemple, l’ID 1) :

Terminal window
http https://jsonplaceholder.typicode.com/posts/1

Requête GET avec paramètres

Pour ajouter un filtre (par exemple, les posts de l’utilisateur 1) :

Terminal window
http https://jsonplaceholder.typicode.com/posts userId==1

Note : == est utilisé pour les paramètres d’URL.

Requête POST avec données JSON

Pour créer un nouveau post, vous pouvez envoyer un objet JSON comme ceci :

Terminal window
http POST https://jsonplaceholder.typicode.com/posts \
title="Titre de test" body="Ceci est un post." userId:=1

Le = envoie une chaîne de caractères, tandis que := force l’envoi d’un entier ou du JSON brut.

Requête PUT pour mise à jour

Pour modifier un post existant :

Terminal window
http PUT https://jsonplaceholder.typicode.com/posts/1 \
title="Titre mis à jour" body="Contenu modifié" userId:=1

Requête DELETE

Pour supprimer un post (même si cette API ne le supprime pas réellement) :

Terminal window
http DELETE https://jsonplaceholder.typicode.com/posts/1

Ajout d’en-têtes HTTP

Vous pouvez spécifier des en-têtes personnalisés, comme l’acceptation du JSON :

Terminal window
http GET https://jsonplaceholder.typicode.com/posts Accept:application/json

HTTPie affiche la requête envoyée ainsi que la réponse reçue, de manière lisible et colorée, ce qui est très pratique pour le debug rapide.

Gestion des données JSON et formulaires

HTTPie facilite grandement l’envoi de données JSON et de formulaires, grâce à une syntaxe simple et expressive.

Envoi de données JSON

Par défaut, HTTPie envoie les données au format JSON avec la commande POST :

Terminal window
http POST https://jsonplaceholder.typicode.com/posts \
title="Nouveau post" body="Contenu du post" userId:=1
  • Le signe = indique une chaîne de caractères.
  • Le signe := permet d’envoyer une valeur brute (entier, booléen, JSON, etc.).

Cela envoie un corps JSON équivalent à :

{
"title": "Nouveau post",
"body": "Contenu du post",
"userId": 1
}

Soumission de formulaires HTML

Pour envoyer des données comme un formulaire HTML (application/x-www-form-urlencoded), utilisez l’option -f :

Terminal window
http -f POST https://example.com/form login=admin password=1234

Téléversement de fichiers

Pour envoyer un fichier avec un champ formulaire, utilisez @ :

Terminal window
http -f POST https://example.com/upload fichier@chemin/vers/fichier.txt

Cela crée une requête multipart avec le fichier joint dans le champ fichier.

Ajout d’en-têtes pour le type de contenu

Vous pouvez aussi préciser le type de contenu si nécessaire :

Terminal window
http POST https://api.exemple.com/donnees Content-Type:application/json nom="Jean"

HTTPie détecte souvent automatiquement le bon format, mais vous pouvez forcer l’en-tête si besoin.

Authentification et sessions persistantes

HTTPie prend en charge plusieurs méthodes d’authentification, idéales pour interagir avec des API sécurisées. Il permet aussi de garder des sessions persistantes pour éviter de répéter les identifiants.

Authentification de base (Basic Auth)

Pour utiliser une authentification HTTP de base, indiquez simplement le couple utilisateur:motdepasse :

Terminal window
http -a admin:secret https://example.com/protected

HTTPie encode automatiquement les identifiants en Base64.

Authentification par jeton (Bearer)

Les API modernes utilisent souvent des jetons Bearer dans l’en-tête Authorization :

Terminal window
http GET https://api.example.com/secure Authorization:"Bearer VOTRE_JETON"

Utilisation des sessions persistantes

Avec l’option --session, HTTPie peut enregistrer une session (cookies, headers) dans un fichier :

Terminal window
http --session=ma-session -a admin:secret https://example.com/login

Les requêtes suivantes réutilisent automatiquement cette session :

Terminal window
http --session=ma-session https://example.com/protected

Cela permet de simuler une navigation authentifiée, comme dans un navigateur.

Exemple avec une API réelle : GitHub

Authentification avec un jeton personnel GitHub :

Terminal window
http GET https://api.github.com/user Authorization:"Bearer MON_JETON_GITHUB"

Cette requête renvoie les informations du profil associé au jeton.

Les sessions et l’authentification permettent de tester des API sécurisées sans ressaisir les identifiants à chaque requête, tout en maintenant un contexte utilisateur.

Fonctionnalités avancées

HTTPie propose plusieurs options puissantes pour affiner vos requêtes, automatiser des tâches ou travailler en conditions particulières.

Mode hors ligne (--offline)

Utile pour prévisualiser la requête sans l’envoyer. Cela permet de voir exactement ce qui serait envoyé :

Terminal window
http --offline POST https://example.com apiKey=1234 data="test"

HTTPie génère et affiche la requête HTTP complète sans connexion réseau.

Téléchargement de fichiers (--download)

Pour télécharger un fichier en respectant l’en-tête Content-Disposition :

Terminal window
http --download GET https://example.com/fichier.zip

Le fichier est automatiquement nommé et enregistré localement.

Envoi de requêtes avec fichiers multiples

HTTPie supporte le multipart pour plusieurs fichiers :

Terminal window
http -f POST https://example.com/upload \
fichier1@doc.pdf fichier2@image.jpg

Utilisation de proxies

Pour passer par un proxy HTTP ou HTTPS :

Terminal window
http --proxy=http:http://localhost:8080 GET https://example.com

Ignorer la vérification SSL

Pour des environnements de test ou des serveurs auto-signés :

Terminal window
http --verify=no https://localhost:8443

Définir un timeout

Pour contrôler la durée maximale d’attente :

Terminal window
http --timeout=5 GET https://example.com

Ces fonctionnalités permettent d’adapter HTTPie à des scénarios avancés, y compris le debug réseau, le test de connectivité, ou la simulation d’erreurs dans un pipeline.

Intégration dans les workflows DevOps

HTTPie s’intègre facilement dans les scripts shell et les pipelines CI/CD, ce qui en fait un outil précieux pour les DevOps et les administrateurs systèmes.

Automatiser les tests d’API dans un script

HTTPie peut être utilisé dans un script Bash pour vérifier la disponibilité d’un service :

#!/bin/bash
http --check-status --timeout=5 GET https://api.monsite.com/health || echo "Service indisponible"

L’option --check-status retourne un code d’erreur non nul si la réponse HTTP est un code d’échec (4xx ou 5xx), pratique pour les tests automatisés.

Intégration dans un pipeline CI/CD

Dans un fichier de configuration CI (comme GitLab CI, GitHub Actions ou Jenkins), HTTPie permet de tester des appels API post-déploiement :

test_api:
script:
- http --check-status POST https://api.monsite.com/reload secret=1234

Vérifier un déploiement

Pour vérifier que la dernière version d’une API est bien en ligne :

Terminal window
http GET https://api.monsite.com/version

On peut même extraire des données spécifiques grâce à jq :

Terminal window
http GET https://api.monsite.com/version | jq .version

Comparaison avec Postman et Insomnia

OutilInterfaceAutomatisationTerminal
HTTPieCLIOuiOui
PostmanInterface GUIMoyenneNon
InsomniaInterface GUIMoyenneNon

HTTPie est souvent préféré pour les environnements serveurs, les pipelines et les tests en ligne de commande, là où Postman est plus adapté à un usage visuel sur poste local.

Cette souplesse fait de HTTPie un outil parfaitement aligné avec les pratiques DevOps modernes.

Conclusion

HTTPie est un outil puissant et flexible pour interagir avec les API RESTful. Sa syntaxe claire, ses fonctionnalités avancées et son intégration facile.

Plus d’infos