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 :
sudo apt updatesudo apt install httpie
Sur Fedora :
sudo dnf install httpie
Sur Arch Linux :
sudo pacman -S httpie
Sur macOS
Avec Homebrew, l’installation est rapide :
brew install httpie
Sur Windows
Utilisez choco (Chocolatey) :
choco install httpie
Ou scoop :
scoop install httpie
Méthode universelle avec pip
Si vous avez Python installé, utilisez pip
:
pip install --upgrade httpie
Vérifiez ensuite que tout fonctionne :
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 :
http https://jsonplaceholder.typicode.com/posts
Pour récupérer un post spécifique (par exemple, l’ID 1) :
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) :
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 :
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 :
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) :
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 :
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
:
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
:
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 @
:
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 :
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
:
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
:
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 :
http --session=ma-session -a admin:secret https://example.com/login
Les requêtes suivantes réutilisent automatiquement cette session :
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 :
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é :
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
:
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 :
http -f POST https://example.com/upload \ fichier1@doc.pdf fichier2@image.jpg
Utilisation de proxies
Pour passer par un proxy HTTP ou HTTPS :
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 :
http --verify=no https://localhost:8443
Définir un timeout
Pour contrôler la durée maximale d’attente :
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/bashhttp --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 :
http GET https://api.monsite.com/version
On peut même extraire des données spécifiques grâce à jq
:
http GET https://api.monsite.com/version | jq .version
Comparaison avec Postman et Insomnia
Outil | Interface | Automatisation | Terminal |
---|---|---|---|
HTTPie | CLI | Oui | Oui |
Postman | Interface GUI | Moyenne | Non |
Insomnia | Interface GUI | Moyenne | Non |
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.