I\'ve tried the following to send a line break with curl, but \\n
is not interpreted by curl.
curl -X PUT -d \"my message\\n\" http://localhost:
Sometimes you want to provide the data to be sent verbatim.
The --data-binary
option does that.
(I ended up here with a slightly different question, so I'm just going to post my answer because it might help future explorers)
My solution applies to people who are sending form-style data, i.e. key/value pairs in a query string. Use the encoded line break, which is %0A
, just like how an encoded space is %20
. You can use http://meyerweb.com/eric/tools/dencoder/ to convert other symbols.
So if you want to set the key message
to the value:
line one
another
you would send
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
There's a much easier way!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
This will use ANSI-C Quoting to insert the newline character.
No piping, no data files. See also Sending Newlines with cURL.
Not an answer to your question, but I would work around it by creating a temporary file containing the message and line break, and give curl that file to work on:
curl -X PUT -d @message.txt http://localhost:8000/hello
From the manual:
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. The contents of the file must already be URL-encoded. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with --data @foobar.
Had similar issue. While uploading csv file from Mac to cloud storage, new lines were being removed. After downloading it, the entire file looked like a single line. I tried adding different EOL characters '\n' '\r' '\r\n' with no success. Using '--data-binary' instead of '-d' solved the issue. Btw this issue occurred only from Mac. '-d' worked just fine while making the call from CentOS machine. This very much looks like due to Mac's newline character. But don't feel like debugging any more.
Thanks a lot for your help.
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"
I was using Sendgrid with this code (copied below) originally found here https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\n
worked in Gmail, but \n
was ignored. I tried to double the escape and other suggestions. I also tried \r\n
and that did not work in Gmail either. Note: I didn't bother to test other email clients, maybe it was a Gmail-specific problem.
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!"}]}'
Eventually I gave up looking for a solution and switched the text/plain
to text/html
and just used <br />
tags.
Someone suggested that Sendgrid converts plaintext to HTML if you have a tracking pixel enabled, which makes sense. Maybe the newlines were destroyed in the plaintext-to-html conversion process. I assume the client wants a tracking pixel, so decided to switch to HTML.