cUrl: список аргументов слишком длинный

15

Я получаю сообщение об ошибке: Argument list too longпри попытке использовать cUrl для отправки файла в base64 внутри тела моего JSON.

Я использую что-то вроде этого:

DATA=$( base64 "$FILE" )

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

Есть ли другой способ получить данные в теле моего JSON?

Учтите, что мне нужно прочитать файл в моей файловой системе, преобразовать его в base64, а затем отправить его в тело.

Mateo
источник
может быть связано: stackoverflow.com/questions/19003855/…
fredtantini

Ответы:

19

Если файл в кодировке base64 слишком большой, чтобы поместиться в список аргументов, вам придется передать его через файл. Один из самых простых способов, которые я могу придумать, - передать его через стандартный ввод. Со страницы man curl вы можете использовать -d @-чтение из stdin вместо командной строки.

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
jw013
источник
Вы также можете использовать эту версию, мне нравится больше:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook