cUrl: Daftar argumen terlalu panjang

15

Saya mendapatkan kesalahan: Argument list too longketika mencoba menggunakan cUrl untuk mengirim file di base64 di dalam tubuh JSON saya.

Saya menggunakan sesuatu seperti ini:

DATA=$( base64 "$FILE" )

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

Apakah ada cara lain untuk mendapatkan DATA di tubuh JSON saya?

Mempertimbangkan bahwa saya perlu membaca file di sistem file saya, mengubahnya menjadi base64 dan kemudian mengirimkannya ke dalam tubuh.

Mateo
sumber
mungkin terkait: stackoverflow.com/questions/19003855/…
fredtantini

Jawaban:

19

Jika file yang disandikan base64 terlalu besar untuk masuk dalam daftar argumen Anda harus meneruskannya melalui file. Salah satu cara yang lebih mudah yang dapat saya pikirkan adalah melewatinya melalui input standar. Dari halaman manual curl , Anda dapat menggunakannya -d @-untuk membaca dari stdin alih-alih baris perintah.

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
jw013
sumber
Anda juga dapat menggunakan versi ini yang lebih saya sukai:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook