Aller au contenu
Administration Linux medium

Maîtrisez la commande Httpie

9 min de lecture

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.

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 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é, utilisez pip :

Fenêtre de terminal
pip install --upgrade 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

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.

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.

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.

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=http:http://localhost:8080 GET https://example.com

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

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

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.

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.