cUrl:パラメータリストが長すぎます。

cUrl:パラメータリストが長すぎます。

Argument list too longcUrlを使用して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@

関連情報