Як надіслати вміст файлу як об'єкт тіла за допомогою CURL


207

Я використовую утиліту командного рядка cURL для надсилання HTTP POST на веб-сервіс. Я хочу включити вміст файлу як об'єкт тіла POST. Я спробував використовувати, -d </path/to/filename>як і інші варіанти з інформацією про тип, наприклад, --data </path/to/filename> --data-urlencode </path/to/filename>тощо ... файл завжди додається. Мені це потрібно як сутність тіла.

Відповіді:


338

Я вважаю, що ви шукаєте @filenameсинтаксис, наприклад:

зніміть нові лінії

curl --data "@/path/to/filename" http://...

тримати нові лінії

curl --data-binary "@/path/to/filename" http://...

=====

curl позбавить усіх нових рядків з файлу. Якщо ви хочете надіслати файл із новими рядками недоторканими, використовуйте --data-binaryзамість --data


21
Якщо ви хочете бути по-справжньому фантазійним, ви можете зробити: cat file.txt | curl --data "@-" `(< url.txt )` @-говорить curl читати зі stdin. Ви також можете просто скористатися перенаправленням, (< x.txt )щоб розмістити все, що завгодно. Якщо ви використовуєте bash.
Брейдлі

62
curl позбавить усіх нових рядків з файлу. Якщо ви хочете надіслати файл із новими рядками недоторканими, використовуйте --data-binaryзамість --data.
Кріс

тепер, як можна додати облікові дані для входу для авторизації цього запиту?
anon58192932

@ anon58192932 - Це залежить від протоколу безпеки сервера. Якщо ви використовуєте name:valueпари, як-от ім’я користувача та пароль, то додайте необхідні заголовки, які відповідають тому, що служба очікує: --header: "<header_name>:<header_value>"як один рядок.
Рой Хінклі

19

Я знаю, що на це питання відповіли, але в моєму випадку я намагався надіслати вміст текстового файлу в appi Slack Webhook, і чомусь вищевказана відповідь не спрацювала. Все, що, нарешті, зробив для мене трюк:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

Цей не перетворює точки в підкреслення (. -> _) і зберігає нові рядки. Дякую!
Рамон Фінкен

1
Це круто, але він не відповідає на питання, оскільки файл вибухає в командному рядку, а не задається для curl. Мені також цікаво, чи потрібно
Джерард

Спасибі, ти врятував мені життя!
aryswisnu

Для величезного файлу контенту, згортання згортання не буде працювати, curl: argument list too longу такому випадку прийнята відповідь - це збереження життяcurl --data "@/path/to/filename" http://...
Ще один кодер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.