curl:参数列表太长

33

我希望通过Sparkpost API和curl post发送一封带有PDF附件的电子邮件。

为了插入PDF文件,我使用以下代码(我的测试文件是test.pdf,大小约为200KB)

"data":"'$(cat test.pdf} | base64 --wrap=0)'"

但是不知何故,这并没有成功,显示了以下错误:

/usr/bin/curl: Die Argumentliste ist zu lang (original)
/usr/bin/curl: Argument list is too long

编辑: curl命令


curl命令

curl -X POST https://api.eu.sparkpost.com/api/v1/transmissions -H 'Authorization: <APIKEY>' -H 'Content-Type: application/json' -d '{
   "options":{
      "open_tracking":false,
      "click_tracking":false,
      "inline_css":false
   },
   "recipients":[
      {
         "address":{
            "email":"user@domain.tld",
            "name":"user"
         }
      }
   ],
   "content":{
      "from":{
         "name":"sender",
         "email":"sender@domain.tld"
      },
      "reply_to":"replyto@domain.tld",
      "subject":"subject",
      "text":"textbody",
      "attachments":[
         {
            "name":"attachmentname.pdf",
            "type":"application/pdf",
            "data":"'$(cat test.pdf | base64 --wrap=0)'"
         }
      ]
   }
}'

你能发一下你正在使用的 cURL 命令吗? - Marcus
1
@Marcus 添加了我的curl命令。 - Simon
2个回答

72

这是由于您尝试在命令行上传递整个base64编码的内容。 curl 有从文件加载要POST的数据的能力,我建议您这样做。 更多信息可以在手册页面中找到,但基本格式如下:

curl -X POST -d @filename.txt https://website.com/path

8
为什么在你的答案中直接使用“@”会很好,因为它是唯一一个没有明确用法指示的缺失部分。 - Btc Sources
注意:不必要地使用“-X”... POST已经被推断出来了。POST也是如此man curl - Ax_
https://unix.stackexchange.com/questions/144479/what-does-the-at-symbol-before-a-filename-mean-in-a-curl-command - Alwyn
2
为了使@Alwyn的引用更清晰,它指向了@符号的解释:“如果您以@字母开头的数据,则其余部分应该是文件名”。 - cre8

2
根据curl手册,-F选项允许您对文件进行base64编码,但将输出限制为76个字符。 例如: -F '=@localfile;encoder=base64'

你能给一个完整的例子吗? - chovy
考虑到我在/home/centos目录下,发送names.txt文件需要使用以下命令: curl -X POST http://127.0.0.1:1880/test '-F' = @ localfile; encoder = base64'然而,如果文件编码超过76个字符,文件将会损坏。 - Alisson Mesquita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接