¿Es posible usar curl y publicar datos binarios sin pasar un nombre de archivo? Por ejemplo, puede publicar un formulario usando binario a través de --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
Sin embargo, esto requiere que exista un archivo. Esperaba poder registrar llamadas HTTP (como descansar servicios) como el texto del comando curl para reproducir la solicitud. (esto ayuda enormemente a depurar estos servicios, por ejemplo)
Sin embargo, registrar comandos curl que hagan referencia a un archivo no sería útil, por lo que esperaba poder registrar los datos binarios sin procesar, presumiblemente codificados en base64, y aún así permitirle copiar y pegar el comando curl registrado y ejecutarlo.
Entonces, ¿es posible usar curl y publicar datos binarios sin hacer referencia a un archivo? Si es así, ¿cómo funcionaría eso? ¿Cómo sería un ejemplo?
Respuestas:
Puede pasar datos a curl a través de STDIN de esta manera:
El
@-
le dicecurl
a tirar desde STDIN.Para canalizar datos binarios a curl (por ejemplo):
fuente
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
¿dónde\x03\xF1
están los datos binarios en bruto como hexadecimales, que es casi exactamente lo que quiero.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Trabajado como un encanto. Para validar, también probé:cat 1.jpg | md5sum
ymd5sum 1.jpg
. Ambos devolvieron el mismo valor.No estoy seguro de por qué, pero la línea de comando exacta que sugirió slm no funcionó para mí. Con una ligera modificación, funcionó lo siguiente:
fuente
Además de esta respuesta, el
echo
comando agrega una nueva línea a su salida de forma predeterminada. Esto agrega un\n
al final de sus datos binarios, por lo tanto, curl recibirá ese carácter también como entrada.Para evitar eso, puede usar el
printf
comando o el-n
interruptor de la siguiente manera:o
De esta forma, no se agregará una nueva línea a la entrada de curl y los bytes que se alimentan a curl serán exactamente aquellos a los que pasa
echo
.fuente