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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer HTTPie et lancer une première requête.
- Lire une réponse colorée (en-têtes + corps JSON).
- Envoyer des données JSON et des formulaires simplement.
- Gérer l'authentification et les sessions persistantes.
- Comparer HTTPie à
curlpour choisir le bon outil.
Ce guide est validé avec HTTPie 3.2.4, la dernière version publiée (novembre 2024), rejouée sous Debian 13 contre un service httpbin local.
Installation de HTTPie
Section intitulée « 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
Section intitulée « Sur Linux »Sur Debian, Ubuntu et dérivés :
sudo apt updatesudo apt install httpieSur Fedora :
sudo dnf install httpieSur RHEL 10 et AlmaLinux 10, aucun paquet httpie n'existe, ni dans
les dépôts de base ni dans EPEL (No matching Packages to list, vérifié
sur AlmaLinux 10.2) : passez par pipx ou par Nix.
Sur Arch Linux :
sudo pacman -S httpieSur macOS
Section intitulée « Sur macOS »Avec Homebrew, l’installation est rapide :
brew install httpieSur Windows
Section intitulée « Sur Windows »Utilisez choco (Chocolatey) :
choco install httpieOu scoop :
scoop install httpieMéthode universelle avec pipx
Section intitulée « Méthode universelle avec pipx »Si vous avez Python installé, préférez pipx, qui isole HTTPie dans son
propre environnement virtuel. Un pip install httpie direct est refusé sur
Debian 13 avec error: externally-managed-environment, pour protéger les
paquets Python du système :
pipx install httpieVérifiez ensuite que tout fonctionne :
http --versionCette commande doit renvoyer le numéro de version de HTTPie, prouvant que l’installation est réussie.
Syntaxe de base et requêtes simples
Section intitulée « 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
Section intitulée « Requête GET simple »Pour récupérer la liste des posts :
http https://jsonplaceholder.typicode.com/postsPour récupérer un post spécifique (par exemple, l’ID 1) :
http https://jsonplaceholder.typicode.com/posts/1Requête GET avec paramètres
Section intitulée « 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==1Note : == est utilisé pour les paramètres d’URL.
Requête POST avec données JSON
Section intitulée « 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:=1Le = 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
Section intitulée « 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:=1Requête DELETE
Section intitulée « 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/1Ajout d’en-têtes HTTP
Section intitulée « 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/jsonDans un terminal, HTTPie affiche la réponse reçue, en-têtes puis corps,
de manière lisible et colorée. Ajoutez -v pour voir aussi la requête
envoyée, ce qui est très pratique pour le debug rapide.
Contrôler l'affichage avec --print
Section intitulée « Contrôler l'affichage avec --print »L'option --print choisit les parties affichées : H pour les en-têtes de
la requête, B pour son corps, h pour les en-têtes de la réponse, b
pour son corps. --print=hb reproduit l'affichage du terminal, --print=h ne
garde que les en-têtes. Quand la sortie part dans un tube ou un fichier,
HTTPie n'écrit plus que le corps, d'où le bon fonctionnement de | jq :
http --print=h GET https://jsonplaceholder.typicode.com/posts/1Gestion des données JSON et formulaires
Section intitulée « 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
Section intitulée « 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
Section intitulée « 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=1234Téléversement de fichiers
Section intitulée « 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.txtCela crée une requête multipart avec le fichier joint dans le champ fichier.
Ajout d’en-têtes pour le type de contenu
Section intitulée « 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
Section intitulée « 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)
Section intitulée « 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/protectedHTTPie encode automatiquement les identifiants en Base64. Écrit ainsi, le mot
de passe reste pourtant dans l'historique du shell et dans les arguments du
processus, visibles par ps aux. En usage interactif, donnez seulement
l'utilisateur, http -a admin https://example.com/protected : la
documentation de HTTPie 3.2.4 précise qu'il demande alors le mot de passe par
une invite masquée.
Authentification par jeton (Bearer)
Section intitulée « 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
Section intitulée « 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/loginLes requêtes suivantes réutilisent automatiquement cette session :
http --session=ma-session https://example.com/protectedCela permet de simuler une navigation authentifiée, comme dans un navigateur.
Le fichier de session, rangé sous ~/.config/httpie/sessions/<hôte>/, garde
pourtant le couple admin:secret en clair dans son champ raw_auth :
traitez-le comme un secret, en chmod 600, et supprimez-le après usage.
Exemple avec une API réelle : GitHub
Section intitulée « 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
Section intitulée « 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)
Section intitulée « 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)
Section intitulée « 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.zipLe fichier est automatiquement nommé et enregistré localement.
Envoi de requêtes avec fichiers multiples
Section intitulée « 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.jpgUtilisation de proxies
Section intitulée « Utilisation de proxies »Pour passer par un proxy HTTP ou HTTPS :
http --proxy=https:http://localhost:8080 GET https://example.comLe préfixe avant les deux-points désigne le schéma de l'URL visée, pas celui
du proxy. Un --proxy=http:... ne s'applique qu'aux URL http:// : sur une URL
https://, il est ignoré sans message et la requête part en direct.
Ignorer la vérification SSL
Section intitulée « Ignorer la vérification SSL »Pour des environnements de test ou des serveurs auto-signés :
http --verify=no https://localhost:8443Définir un timeout
Section intitulée « Définir un timeout »Pour contrôler la durée maximale d’attente :
http --timeout=5 GET https://example.comCes 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
Section intitulée « 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
Section intitulée « 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 --ignore-stdin --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 : 4 pour un 4xx, 5 pour un 5xx, pratique pour
les tests automatisés.
Dans un script ou un job de CI, ajoutez aussi --ignore-stdin. Quand
l'entrée standard n'est pas un terminal, HTTPie la lit comme corps de
requête : un simple http GET part alors en POST, et un champ
clé=valeur provoque l'erreur
Request body (from stdin, --raw or a file) and request data (key=value) cannot be mixed.
Intégration dans un pipeline CI/CD
Section intitulée « 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. Le secret vient d'une variable de CI masquée, jamais d'une valeur écrite en clair dans le fichier, qui serait lisible par quiconque accède au dépôt :
test_api: script: - http --ignore-stdin --check-status POST https://api.monsite.com/reload secret="$RELOAD_SECRET"Vérifier un déploiement
Section intitulée « 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/versionOn peut même extraire des données spécifiques grâce à jq :
http GET https://api.monsite.com/version | jq .versionComparaison avec Postman et Insomnia
Section intitulée « 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.
À retenir
Section intitulée « À retenir »- HTTPie est un client HTTP en ligne de commande plus lisible que curl : sortie colorée, JSON natif, syntaxe épurée.
http GET <url>suffit pour une requête ; un champclé=valeurdevient du JSON, unclé:valeurun en-tête.- L'option
--print=hbcontrôle l'affichage (en-têtesh, corpsb) pour ne montrer que l'utile. - Les sessions persistantes conservent l'authentification entre les requêtes.
- HTTPie complète
curl: curl pour les scripts portables et le bas niveau, HTTPie pour le confort de test d'API.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Approfondissements
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Plus d'infos
Section intitulée « Plus d'infos »Ces deux liens mènent à la documentation officielle du CLI HTTPie et à son dépôt source.