cUrl: lista argumentów jest za długa

15

Argument list too longPojawia się błąd: gdy próbuję użyć cUrl, aby wysłać plik w base64 w ciele mojego JSON.

Używam czegoś takiego:

DATA=$( base64 "$FILE" )

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

Czy istnieje inny sposób na uzyskanie danych w ciele mojego JSON?

Weź pod uwagę, że muszę odczytać plik w moim systemie plików, przekształcić go w base64, a następnie wysłać go do ciała.

Mateo
źródło
może powiązane: stackoverflow.com/questions/19003855/…
fredtantini

Odpowiedzi:

19

Jeśli plik zakodowany w standardzie base64 jest zbyt duży, aby zmieścić się na liście argumentów, musisz przekazać go przez plik. Jednym z łatwiejszych sposobów jest przekazanie go za pomocą standardowego wejścia. Ze strony podręcznika curl można użyć -d @-do odczytu ze standardowego wejścia zamiast z wiersza poleceń.

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
jw013
źródło
Możesz także skorzystać z tej wersji. Podoba mi się to bardziej:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook,