Как отправить разрыв строки с помощью curl? - PullRequest
79 голосов
/ 06 октября 2010

Я попробовал следующее, чтобы отправить разрыв строки с помощью curl, но \n не интерпретируется как curl.

curl -X PUT -d "my message\n" http://localhost:8000/hello

Как я могу отправить разрыв строки с помощью curl?

Ответы [ 9 ]

98 голосов
/ 30 августа 2011

Иногда вы хотите предоставить данные для отправки дословно.

Опция --data-binary делает это.

34 голосов
/ 14 марта 2011

Ваша оболочка передает \, за которым следует n вместо новой строки для скручивания, а не "my message\n".Bash поддерживает другой строковый синтаксис, который поддерживает escape-последовательности, такие как \n и \t.Чтобы использовать его, начните строку с $' и завершите строку с ':

curl -X PUT -d $'my message\n' http://localhost:8000/hello

См. Цитирование ANSI-C в Bash ReferenceРуководство

15 голосов
/ 06 июня 2014

Решение для тех, кто не хочет использовать файлы и не хочет прибегать к экранированию от оболочки:

curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF

Но это буквально новые строки в полезных данных почтовых данных, а не в полях формы.

12 голосов
/ 04 мая 2016

Существует гораздо более простой способ!

curl -X PUT -d $'my message\n' http://localhost:8000/hello

При этом будет использоваться Цитирование ANSI-C для вставки символа новой строки.

Нет данных, нет файлов данных.См. Также Отправка новых строк с помощью cURL .

6 голосов
/ 06 февраля 2014

(я закончил здесь с немного другим вопросом, поэтому я просто опубликую свой ответ, потому что он может помочь будущим исследователям)

Мое решение применимо к людям, которые отправляют данные в форме формы, то есть пары ключ / значение в строке запроса. Используйте закодированный разрыв строки, который равен %0A, так же, как кодированный пробел %20. Вы можете использовать http://meyerweb.com/eric/tools/dencoder/ для преобразования других символов.

Так что если вы хотите установить ключ message на значение:

line one
another

вы бы отправили

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
3 голосов
/ 06 октября 2010

Не ответ на ваш вопрос, но я бы обойти его, создав временный файл, содержащий сообщение и разрыв строки, и дал бы curl этот файл для работы:

curl -X PUT -d @message.txt http://localhost:8000/hello

Из manual :

Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы curl считывал данные из stdin,Содержимое файла уже должно быть в кодировке URL.Несколько файлов также могут быть указаны.Публикация данных из файла с именем 'foobar', таким образом, будет выполняться с --data @ foobar.

2 голосов
/ 18 ноября 2014

Очень простой способ, просто 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
1 голос
/ 21 декабря 2017

Была похожая проблема. При загрузке 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"
0 голосов
/ 21 октября 2017

Я использовал 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.

...