Est-il possible d'utiliser curl et de publier des données binaires sans passer de nom de fichier? Par exemple, vous pouvez publier un formulaire en utilisant binaire via --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
Cependant, cela nécessite qu'un fichier existe. J'espérais pouvoir enregistrer les appels HTTP (tels que les services de repos) comme texte de la commande curl pour reproduire la demande. (cela facilite grandement le débogage de ces services, par exemple)
Cependant, la journalisation des commandes curl qui référencent un fichier ne serait pas utile, donc j'espérais pouvoir réellement enregistrer les données binaires brutes, vraisemblablement encodées en base64, tout en vous permettant de copier et coller la commande curl enregistrée et de l'exécuter.
Alors, est-il possible d'utiliser des données curl et post binaires sans référencer un fichier? Si oui, comment cela fonctionnerait-il? À quoi ressemblerait un exemple?
Vous pouvez passer des données en boucle via STDIN comme ceci:
echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com
Le @-
indique à curl
de se retirer de STDIN.
Pour diriger les données binaires vers curl (par exemple):
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
En ajoutant à this answer, la commande echo
ajoute une nouvelle ligne à sa sortie par défaut. Cela ajoute un \n
à la fin de vos données binaires, donc curl recevra également ce caractère en entrée.
Pour éviter cela, vous pouvez utiliser la commande printf
ou -n
basculer comme ceci:
printf '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
ou
echo -en '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
De cette façon, aucune nouvelle ligne ne sera ajoutée à l'entrée curl et les octets alimentés à curl seront exactement ceux que vous passez à echo
.
Je ne sais pas pourquoi, mais la ligne de commande exacte suggérée par slm n'a pas fonctionné pour moi. Avec une légère modification, les éléments suivants ont fonctionné:
echo -e '...data...\n' | curl -s -T - sftp://[email protected]/~/test.txt