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?
Réponses:
Vous pouvez passer des données en boucle via STDIN comme ceci:
Le
@-
ditcurl
de se retirer de STDIN.Pour diriger les données binaires vers curl (par exemple):
la source
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
Où\x03\xF1
sont les données binaires brutes en hexadécimal, ce qui est à peu près exactement ce que je veux.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Travaillé comme un charme. Pour valider, j'ai également essayé:cat 1.jpg | md5sum
etmd5sum 1.jpg
. Ils ont tous deux retourné la même valeur.Je ne sais pas pourquoi, mais la ligne de commande exacte suggérée par slm ne fonctionnait pas pour moi. Avec une légère modification, les éléments suivants ont fonctionné:
la source
Ajoutant à cette réponse, la
echo
commande 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
printf
commande ou le-n
commutateur comme ceci:ou
De cette façon, aucune nouvelle ligne ne sera ajoutée à l'entrée curl et les octets alimentés à curl seront exactement ceux auxquels vous passez
echo
.la source