HTTPie détecte s’il tourne dans un TTY. Quand il n’y en a pas, comme lorsque Claude Code l’appelle comme subprocess, HTTPie suppose que stdin pourrait avoir des données à venir et interprète la requête comme un POST, même si tu voulais faire un GET.

La correction, c’est --ignore-stdin :

http --ignore-stdin GET localhost:3000/things

Le piège : une fois que tu dis à Claude Code de toujours utiliser --ignore-stdin, il va aussi l’utiliser quand tu pipes des données, ce qui brise complètement ce cas d’utilisation :

# Ça va briser - --ignore-stdin jette le body pipé
cat payload.json | http --ignore-stdin POST localhost:3000/things

Donc --ignore-stdin est le bon défaut pour les lectures, mais il faut le retirer quand on pipe vraiment stdin pour des écritures. Ça vaut la peine de le préciser explicitement dans tes instructions à Claude Code, sinon il va cargo-culter --ignore-stdin partout après que tu en aies parlé une fois.