Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

HTTPie : tester une API simplement

Par mis à jour le

Améliorer cette page

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.

  • 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 à curl pour 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.

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 Debian, Ubuntu et dérivés :

Fenêtre de terminal
sudo apt update
sudo apt install httpie

Sur Fedora :

Fenêtre de terminal
sudo dnf install httpie

Sur 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 :

Fenêtre de terminal
sudo pacman -S httpie

Avec Homebrew, l’installation est rapide :

Fenêtre de terminal
brew install httpie

Utilisez choco (Chocolatey) :

Fenêtre de terminal
choco install httpie

Ou scoop :

Fenêtre de terminal
scoop install httpie

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 :

Fenêtre de terminal
pipx install httpie

Vérifiez ensuite que tout fonctionne :

Fenêtre de terminal
http --version

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

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.

Pour récupérer la liste des posts :

Fenêtre de terminal
http https://jsonplaceholder.typicode.com/posts

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

Fenêtre de terminal
http https://jsonplaceholder.typicode.com/posts/1

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

Fenêtre de terminal
http https://jsonplaceholder.typicode.com/posts userId==1

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

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

Fenêtre de terminal
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.

Pour modifier un post existant :

Fenêtre de terminal
http PUT https://jsonplaceholder.typicode.com/posts/1 \
title="Titre mis à jour" body="Contenu modifié" userId:=1

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

Fenêtre de terminal
http DELETE https://jsonplaceholder.typicode.com/posts/1

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

Fenêtre de terminal
http GET https://jsonplaceholder.typicode.com/posts Accept:application/json

Dans 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.

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 :

Fenêtre de terminal
http --print=h GET https://jsonplaceholder.typicode.com/posts/1

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

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

Fenêtre de terminal
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
}

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

Fenêtre de terminal
http -f POST https://example.com/form login=admin password=1234

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

Fenêtre de terminal
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.

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

Fenêtre de terminal
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.

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.

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

Fenêtre de terminal
http -a admin:secret https://example.com/protected

HTTPie 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.

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

Fenêtre de terminal
http GET https://api.example.com/secure Authorization:"Bearer VOTRE_JETON"

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

Fenêtre de terminal
http --session=ma-session -a admin:secret https://example.com/login

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

Fenêtre de terminal
http --session=ma-session https://example.com/protected

Cela 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.

Authentification avec un jeton personnel GitHub :

Fenêtre de terminal
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.

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

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

Fenêtre de terminal
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.

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

Fenêtre de terminal
http --download GET https://example.com/fichier.zip

Le fichier est automatiquement nommé et enregistré localement.

HTTPie supporte le multipart pour plusieurs fichiers :

Fenêtre de terminal
http -f POST https://example.com/upload \
fichier1@doc.pdf fichier2@image.jpg

Pour passer par un proxy HTTP ou HTTPS :

Fenêtre de terminal
http --proxy=https:http://localhost:8080 GET https://example.com

Le 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.

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

Fenêtre de terminal
http --verify=no https://localhost:8443

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

Fenêtre de terminal
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.

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.

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

#!/bin/bash
http --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.

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"

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

Fenêtre de terminal
http GET https://api.monsite.com/version

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

Fenêtre de terminal
http GET https://api.monsite.com/version | jq .version
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.

  1. HTTPie est un client HTTP en ligne de commande plus lisible que curl : sortie colorée, JSON natif, syntaxe épurée.
  2. http GET <url> suffit pour une requête ; un champ clé=valeur devient du JSON, un clé:valeur un en-tête.
  3. L'option --print=hb contrôle l'affichage (en-têtes h, corps b) pour ne montrer que l'utile.
  4. Les sessions persistantes conservent l'authentification entre les requêtes.
  5. HTTPie complète curl : curl pour les scripts portables et le bas niveau, HTTPie pour le confort de test d'API.

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

6 questions
6 min.
70% requis

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

Ces deux liens mènent à la documentation officielle du CLI HTTPie et à son dépôt source.

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn