cUrl: lista de argumentos muito longa

15

Estou recebendo o erro: Argument list too longao tentar usar cUrl para enviar um arquivo em base64 dentro do corpo do meu JSON.

Estou usando algo parecido com isto:

DATA=$( base64 "$FILE" )

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

Existe alguma outra maneira de obter os DADOS no corpo do meu JSON?

Leve em consideração que eu preciso ler um arquivo no meu sistema de arquivos, transformá-lo em base64 e enviá-lo para dentro do corpo.

Mateo
fonte
talvez relacionado: stackoverflow.com/questions/19003855/…
fredtantini

Respostas:

19

Se o arquivo codificado em base64 for muito grande para caber na lista de argumentos, você precisará passá-lo por um arquivo. Uma das maneiras mais fáceis em que consigo pensar é passá-lo via entrada padrão. Na página do manual curl , você pode usar -d @-para ler a partir de stdin, em vez da linha de comando.

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
jw013
fonte
Você também pode usar esta versão Eu gosto mais:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook 15/12/19