Я спробував наступне, щоб надіслати розрив рядка за допомогою curl, але \n
не інтерпретується curl.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Як можна надіслати розрив рядка за допомогою curl?
Відповіді:
Іноді ви хочете надати дані, що надсилаються дослівно.
--data-binary
Варіант робить це.
-d @message.txt
як пропонується в іншій відповіді, зокрема може змінити розриви рядків. --data-binary
з іншого боку , НЕ буде (що важливо , якщо ви хочете зберегти ваші CRLF переноси рядків для многочастного / форм-даних, див: stackoverflow.com/questions/10765243 / ... )
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
Ваша оболонка передається \
, n
а не новий рядок, щоб згортати, а не "my message\n"
. Bash має підтримку іншого синтаксису рядків, який підтримує екрануючі послідовності, такі як \n
і \t
. Щоб використовувати його, запустіть рядок з $'
і закінчіть рядок з '
:
curl -X PUT -d $'my message\n' http://localhost:8000/hello
my message\n
дослівно, а не з двома втечами, як ви кажете.
my message\n
те саме, що і я "my message\n"
.
\n
не має нічого спільного з JavaScript. Насправді ніщо тут взагалі не має нічого спільного з JavaScript.
Є набагато простіший спосіб!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Для цього буде використано цитування ANSI-C, щоб вставити символ нового рядка.
Ні трубопроводів, ні файлів даних. Див. Також Надсилання нових рядків за допомогою cURL .
Рішення для тих, хто не хоче використовувати файли і не хоче вдаватися до магії, яка уникає оболонки, є:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Але це буквально нові рядки в корисному навантаженні даних, а не в полях форми.
@
це означає ім’я файлу, але чи є якесь особливе значення при використанні @-
? Що <<EOF
робить?
@-
вказує curl споживати вхідні дані із стандартного in, і <<EOF
це індикатор кінця потоку для bash. Потім ми згодом використовуємо чарівне слово EOF
в корисному наборі даних, щоб сказати bash, що ми закінчили писати в потік.
-
це свого роду стандартний спосіб у GNU / Linux вказати STDIN, коли очікується ім'я файлу. Це не універсально, але досить часто.
Був подібний випуск. Під час завантаження CSV-файлу з Mac на хмарне сховище нові рядки видалялися. Після завантаження весь файл виглядав як один рядок. Я спробував додати різні символи EOL '\ n' '\ r' '\ r \ n' без успіху. Проблема вирішена за допомогою '--data-binary' замість '-d'. До речі, ця проблема виникла лише у Mac. '-d' працював чудово під час дзвінка з машини CentOS. Це дуже схоже на символи нового рядка Mac. Але більше не хочеться налагоджувати.
Велике спасибі за вашу допомогу.
curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"
VS
curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
--data-binary @
вирішило мою проблему (надсилання багаторядкового файлу .ics на сервер CalDAV).
(Я опинився тут із дещо іншим запитанням, тому я просто розміщу свою відповідь, оскільки це може допомогти майбутнім дослідникам)
Моє рішення стосується людей, які надсилають дані у стилі форми, тобто пари ключ / значення у рядку запиту. Використовуйте закодований розрив рядка, який є %0A
, як і закодований простір %20
. Ви можете використовувати http://meyerweb.com/eric/tools/dencoder/ для перетворення інших символів.
Отже, якщо ви хочете встановити для ключа message
значення:
line one
another
ви б надіслали
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Не відповідь на ваше запитання, але я б вирішив це, створивши тимчасовий файл, що містить повідомлення та розрив рядка, і дав би curl цей файл для роботи:
curl -X PUT -d @message.txt http://localhost:8000/hello
З посібника :
Якщо ви починаєте дані з літери @, решта має бути ім'ям файлу для читання даних, або - якщо ви хочете, щоб curl читав дані зі stdin. Вміст файлу повинен бути вже закодований за URL-адресою. Також можна вказати кілька файлів. Опублікування даних із файлу з назвою 'foobar', таким чином, здійснюється за допомогою --data @foobar.
--data-binary
це більш вірна альтернатива -d
, оскільки вона буде надсилати дані дослівно.
-d @/path/to/temp/file.txt
НЕ вирішує проблему розриву рядка. --data-binary
робить, див. вище.
Дуже простий спосіб, просто Shift-Enter на консолі для перерви. Дуже читабельно вводити його теж.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Зробіть це, щоб видалити розрив рядка:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
Я використовував Sendgrid із цим кодом (скопійований нижче), спочатку знайдений тут https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\n
працював у Gmail, але \n
був проігнорований. Я намагався подвоїти втечу та інші пропозиції. Я також пробував, \r\n
і це також не працювало в Gmail. Примітка: Я не заважав тестувати інші поштові клієнти, можливо, це була проблема, пов’язана з Gmail.
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
В кінці кінців я здався в пошуки рішення і включений чи text/plain
для text/html
і тільки використовуваних <br />
тегів.
Хтось запропонував Sendgrid перетворити відкритий текст у HTML, якщо у вас увімкнено піксель відстеження, що має сенс. Можливо, нові рядки були знищені в процесі перетворення відкритого тексту в html. Я припускаю, що клієнт хоче піксель відстеження, тому вирішив перейти на HTML.