Saya telah mencoba yang berikut untuk mengirim jeda baris dengan curl, tetapi \ntidak diartikan oleh curl.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Bagaimana cara mengirim jeda baris dengan curl?
Jawaban:
Terkadang Anda ingin memberikan data untuk dikirim kata demi kata.
The --data-binarypilihan melakukan itu.
-d @message.txtseperti yang disarankan dalam jawaban lain secara khusus dapat mengubah jeda baris Anda. --data-binarydi sisi lain tidak akan (yang penting jika Anda perlu menyimpan
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
Shell Anda lewat \diikuti oleh nbukan baris baru untuk digulung bukan "my message\n". Bash memiliki dukungan untuk sintaks string lain yang mendukung urutan escape seperti \ndan \t. Untuk menggunakannya, mulai string dengan $'dan akhiri string dengan ':
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Lihat ANSI-C Quoting di Bash Reference Manual
my message\nkata demi kata, bukan dengan dua pelolosan seperti yang Anda katakan.
my message\nsama dengan apa yang saya maksud "my message\n".
\ntidak ada hubungannya dengan JavaScript. Nyatanya di sini tidak ada hubungannya sama sekali dengan JavaScript.
Ada cara yang lebih mudah!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Ini akan menggunakan ANSI-C Quoting untuk memasukkan karakter baris baru.
Tanpa perpipaan, tidak ada file data. Lihat juga Mengirim Baris Baru dengan cURL .
Solusi untuk seseorang yang tidak ingin menggunakan file, dan tidak ingin menggunakan sihir pelarian shell adalah:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Tapi ini adalah baris baru literal dalam muatan data pos, dan bukan dalam bidang formulir.
@untuk menunjukkan nama file tetapi apakah ada arti khusus saat menggunakan @-? Apa yang <<EOFdilakukan?
@-memberitahu curl untuk mengkonsumsi input dari standar dalam, dan <<EOFmerupakan indikator akhir aliran untuk bash. Kami kemudian menggunakan kata ajaib EOFdalam payload data untuk memberi tahu bash bahwa kami selesai menulis ke aliran.
-ini semacam cara standar di GNU / Linux untuk menentukan STDIN ketika nama file diharapkan. Ini tidak universal, tapi cukup umum.
(Saya berakhir di sini dengan pertanyaan yang sedikit berbeda, jadi saya hanya akan memposting jawaban saya karena mungkin membantu penjelajah masa depan)
Solusi saya berlaku untuk orang-orang yang mengirim data gaya formulir, yaitu pasangan kunci / nilai dalam string kueri. Gunakan jeda baris yang dikodekan %0A, seperti bagaimana ruang yang dikodekan %20. Anda dapat menggunakan http://meyerweb.com/eric/tools/dencoder/ untuk mengonversi simbol lain.
Jadi jika Anda ingin mengatur kunci messageke nilai:
line one
another
Anda akan mengirim
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Punya masalah serupa. Saat mengunggah file csv dari Mac ke penyimpanan cloud, baris baru telah dihapus. Setelah mengunduhnya, seluruh file tampak seperti satu baris. Saya mencoba menambahkan karakter EOL yang berbeda '\ n' '\ r' '\ r \ n' tetapi tidak berhasil. Menggunakan '--data-binary' alih-alih '-d' menyelesaikan masalah. Btw masalah ini hanya terjadi dari Mac. '-d' berfungsi dengan baik saat melakukan panggilan dari mesin CentOS. Ini sangat mirip karena karakter baris baru Mac. Tapi jangan merasa ingin men-debug lagi.
Terima kasih banyak atas bantuannya.
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 @telah menyelesaikan masalah saya (mengirim file multiline .ics ke server CalDAV).
Bukan jawaban untuk pertanyaan Anda, tetapi saya akan mengatasinya dengan membuat file sementara yang berisi pesan dan jeda baris, dan memberikan curl file itu untuk dikerjakan:
curl -X PUT -d @message.txt http://localhost:8000/hello
Dari manual :
Jika Anda memulai data dengan huruf @, sisanya harus berupa nama file untuk membaca data, atau - jika Anda ingin curl membaca data dari stdin. Konten file harus sudah dienkode URL. Beberapa file juga dapat ditentukan. Memposting data dari file bernama 'foobar' akan dilakukan dengan --data @foobar.
--data-binaryadalah alternatif yang lebih tepat -d, karena akan mengirimkan data secara verbatim.
-d @/path/to/temp/file.txtTIDAK menyelesaikan masalah pemutusan baris. --data-binarytidak, lihat di atas.
Cara yang sangat mudah, cukup Shift-Enter di konsol untuk istirahat. Mengetiknya juga sangat mudah dibaca.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Lakukan ini untuk menghapus jeda baris:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
Saya menggunakan Sendgrid dengan kode ini (disalin di bawah) yang awalnya ditemukan di sini https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\nbekerja di Gmail, tetapi \ndiabaikan. Saya mencoba menggandakan pelarian dan saran lainnya. Saya juga mencoba \r\ndan itu juga tidak berhasil di Gmail. Catatan: Saya tidak repot-repot menguji klien email lain, mungkin itu masalah khusus 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!"}]}'
Akhirnya saya menyerah mencari solusi dan beralih text/plainke text/htmldan hanya menggunakan <br />tag.
Seseorang menyarankan agar Sendgrid mengonversi teks biasa menjadi HTML jika Anda mengaktifkan piksel pelacakan, yang masuk akal. Mungkin baris baru dihancurkan dalam proses konversi teks biasa ke html. Saya berasumsi klien menginginkan piksel pelacakan, jadi memutuskan untuk beralih ke HTML.