Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

Там намного проще!

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

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

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

Ответ 5

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

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

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

line one
another

вы отправите

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello

Ответ 6

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

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

Из руководства :

Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы завиток читал данные из stdin. Содержимое файла уже должно быть закодировано в URL. Также можно указать несколько файлов. Таким образом, отправка данных из файла с именем foobar будет выполняться с помощью -data @foobar.

Ответ 7

Очень простой способ, просто 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

Ответ 8

Я использовал 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": "[email protected]"}]}],"from": {"email": "[email protected]"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'

В конце концов я отказался от поиска решения и переключил text/plain на text/html и только что использовал теги <br />.

Кто-то предположил, что Sendgrid преобразует plaintext в HTML, если у вас включен пиксель отслеживания, что имеет смысл. Возможно, новые строки были уничтожены в процессе преобразования plaintext-to-html. Я предполагаю, что клиент хочет пиксель отслеживания, поэтому решил переключиться на HTML.

Ответ 9

Была похожая проблема. При загрузке CSV файла с Mac в облачное хранилище были удалены новые строки. После загрузки весь файл выглядел как одна строка. Я попытался добавить разные символы EOL '\n' '\ r' '\ r\n', но безуспешно. Использование '- -d ata-binary' вместо '-d' решило проблему. Кстати, эта проблема возникла только с Mac. "-d" прекрасно работал во время звонка с компьютера CentOS. Это очень похоже на символ новой строки Mac. Но больше не хочется отлаживать.

Большое спасибо за вашу помощь.

curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"

В.С.

curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"

Ответ 10

Если вы хотите получить новую строку после результата, вы можете напечатать ее с помощью эха:

curl -X PUT -d "my message" http://localhost:8000/hello && echo