¿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 dicecurla 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\xF1está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 | md5sumymd5sum 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
echocomando agrega una nueva línea a su salida de forma predeterminada. Esto agrega un\nal final de sus datos binarios, por lo tanto, curl recibirá ese carácter también como entrada.Para evitar eso, puede usar el
printfcomando o el-ninterruptor 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