Bash /dev/TCP pour requêtes HTTP sans curl
Original : TIL: You can make HTTP requests without curl using Bash /dev/TCP
Pourquoi c'est important
Technique pratique pour déboguer la connectivité réseau dans des conteneurs légers sans dépendre de packages supplémentaires.
Bash peut effectuer des requêtes HTTP sans curl ni wget en utilisant /dev/tcp. Cette technique permet d'accéder à des services réseau depuis des conteneurs minimaux dépourvus d'outils standard, via une simple redirection de socket TCP.
Marek Šuppa explique comment utiliser bash pour effectuer des requêtes HTTP élémentaires sans dépendre de curl ou wget. La technique repose sur /dev/tcp, une redirection spéciale gérée en interne par bash qui n'existe pas réellement dans le système de fichiers. En utilisant « exec 3<>/dev/tcp/service:8642 », bash ouvre une connexion TCP et crée un descripteur de fichier accessible en lecture/écriture. L'utilisateur peut ensuite envoyer une requête HTTP formatée manuellement avec printf et lire la réponse via cat. L'article fournit des exemples pratiques incluant l'ajout d'en-têtes d'authentification Bearer. Cependant, l'auteur souligne les limitations : cette approche n'est pas un vrai client HTTP et ne gère pas les redirections, la compression, les réponses chunked, TLS ou les retries. L'en-tête « Connection: close » est crucial pour éviter que la connexion ne reste ouverte indéfiniment. La technique fonctionne uniquement en bash compilé avec --enable-net-redirections, et ne fonctionne pas en POSIX sh ou zsh. Elle s'avère utile pour diagnostiquer la connectivité réseau dans des conteneurs Docker minimalistes, mais curl reste l'outil recommandé pour un usage quotidien.