curl: список аргументов слишком длинный

Я хочу отправить письмо с прикрепленным pdf-файлом через API Sparkpost с сообщением curl.

Чтобы вставить PDF-файл, который я использую (мой файл test.pdf составляет ~ 200 КБ)

"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 -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)'"
         }
      ]
   }
}'

1 ответ

Решение

Это происходит потому, что вы пытаетесь передать весь контент base64 в командной строке. curl имеет возможность загружать данные в POST из файла, что я бы порекомендовал сделать. Дополнительную информацию можно найти на странице руководства, но основной формат таков:

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

Согласно руководству по curl, опция -F позволяет вам кодировать файл для base64, но ограничивает вывод до 76 символов. Пример: -F '=@localfile;encoder=base64'

Другие вопросы по тегам