我收到错误: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
@