Argument list too long
cUrlを使用してJSON本体にBase64形式のファイルを送信しようとするとエラーが発生します。
私は次のようなものを使用しています:
DATA=$( base64 "$FILE" )
curl -X POST -H "Content-Type: application/json" -d '{
"data": "'"$DATA"'"
}' $HOST
JSON本文からデータを取得する他の方法はありますか?
ファイルシステムからファイルを読み取り、それをBase64に変換してから本文に送信する必要があると思います。
答え1
base64でエンコードされたファイルが大きすぎてパラメータリストに収まらない場合は、ファイルを渡す必要があります。私が考えることができる最も簡単な方法の1つは、標準入力を介して渡すことです。 ~からカールマンページ-d @-
、コマンドラインではなく標準入力から読み取りを使用できます。
curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA
答え2
使用jo
、base64でエンコードされたファイルをシェル変数に保存せずに:
jo data=%"$FILE" |
curl -X POST -H 'Content-Type: application/json' -d @- "$HOST"
これにより、キーを含むJSON文書が生成されますdata
。このキーの値は、この値が参照するファイルのbase64エンコードコンテンツになります$FILE
。
afterパラメーターを%
使用すると、ファイルはbase64でエンコードされます。代わりに、ファイルはJSONエンコードされた文字列として含まれます。=
jo
@