cUrl:参数列表太长

cUrl:参数列表太长

我收到错误: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 编码的文件太大而无法放入参数列表中,则必须通过文件传递它。我能想到的更简单的方法之一是通过标准输入传递它。来自卷曲手册页,您可以使用-d @-从标准输入而不是命令行读取。

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

答案2

使用jo,无需将 base64 编码的文件存储在 shell 变量中:

jo data=%"$FILE" |
curl -X POST -H 'Content-Type: application/json' -d @- "$HOST"

这将创建一个带有密钥的 JSON 文档data。该键的值将是该值引用的文件的 base64 编码内容$FILE

参数中的%after使文件进行 base64 编码。如果您改为使用,该文件将作为 JSON 编码的字符串包含在内。=jo@

相关内容