cUrl: lista de argumentos demasiado larga

15

Recibo el error: Argument list too longcuando intento usar cUrl para enviar un archivo en base64 dentro del cuerpo de mi JSON.

Estoy usando algo como esto:

DATA=$( base64 "$FILE" )

curl -X POST -H "Content-Type: application/json" -d '{
   "data": "'"$DATA"'"
}' $HOST

¿Hay alguna otra forma de obtener los DATOS en el cuerpo de mi JSON?

Tenga en cuenta que necesito leer un archivo en mi sistema de archivos, transformarlo en base64 y luego enviarlo dentro del cuerpo.

Mateo
fuente
quizás relacionado: stackoverflow.com/questions/19003855/…
fredtantini

Respuestas:

19

Si el archivo codificado en base64 es demasiado grande para caber en la lista de argumentos, tendrá que pasarlo a través de un archivo. Una de las formas más fáciles en que puedo pensar es pasarlo a través de la entrada estándar. Desde la página de manual de curl , puede usar -d @-para leer desde stdin en lugar de la línea de comando.

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
jw013
fuente
También puedes usar esta versión que me gusta más:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook