Curl ile bir satır sonu göndermek için aşağıdakileri denedim, ancak curl ile \nyorumlanmadı.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Curl ile nasıl satır sonu gönderebilirim?
Yanıtlar:
Bazen verinin aynen gönderilmesini istersiniz.
--data-binarySeçenek bunu yapmaz.
-d @message.txtDiğer cevapta önerildiği gibi kullanmanın alternatifi, özellikle satır sonlarınızı değiştirebilir. --data-binaryöte yandan olmayacak (çok parçalı / form verisi için CRLF satır
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
Sizin kabuk geçiyor \ardından nyerine kıvrılıp ziyade bir satır "my message\n". Bash, \nve gibi kaçış dizilerini destekleyen başka bir dize sözdizimi desteğine sahiptir \t. Kullanmak için dizeyi şununla başlatın ve dizeyi şu şekilde $'bitirin ':
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Bkz ANSI-C aktaran içinde Bash
my message\n, söylediğiniz gibi iki kaçışla değil , kelimesi kelimesine geçer .
my message\nşeyle aynı "my message\n".
\nJavaScript ile ilgisi yoktur. Aslında buradaki hiçbir şeyin JavaScript ile hiçbir ilgisi yoktur.
Çok daha kolay bir yol var!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Bu , yeni satır karakterini eklemek için ANSI-C Alıntı yapacaktır .
Boru hattı yok, veri dosyası yok. Ayrıca cURL ile Yeni Satır Gönderme konusuna bakın .
Dosyaları kullanmak istemeyen ve kabuk kaçış sihrine başvurmak istemeyen biri için çözüm şudur:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Ancak bu, form alanlarında değil, gönderi veri yükündeki gerçek satırsonlarıdır.
@bir dosya adı belirtmek için anlıyorum , ancak kullanırken özel bir anlamı var @-mı? Ne <<EOFyapıyor
@-curl'ye standart girişten gelen girdiyi tüketmesini söyler ve <<EOFbash için akış sonu göstergesidir. Daha sonra EOFveri yükündeki sihirli kelimeyi kullanarak bash'a akışa yazmayı bitirdiğimizi söyleriz.
-GNU / Linux'ta bir dosya adı beklendiğinde STDIN'i belirtmenin standart yoludur. Evrensel değil ama oldukça yaygındır.
(Buraya biraz farklı bir soruyla geldim, bu yüzden cevabımı göndereceğim çünkü gelecekteki kaşiflere yardımcı olabilir)
Çözümüm, form tarzı veriler, yani bir sorgu dizesindeki anahtar / değer çiftleri gönderen kişiler için geçerlidir. %0AKodlanmış bir alanın olduğu gibi kodlanmış satır sonunu kullanın %20. Diğer sembolleri dönüştürmek için http://meyerweb.com/eric/tools/dencoder/ kullanabilirsiniz .
Yani anahtarı messagedeğere ayarlamak istiyorsanız :
line one
another
gönderirdin
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Benzer bir sorun vardı. Mac'ten bulut depolamaya csv dosyası yüklenirken yeni satırlar kaldırılıyordu. İndirdikten sonra, tüm dosya tek bir satır gibi görünüyordu. Başarısız olarak farklı EOL karakterleri '\ n' '\ r' '\ r \ n' eklemeyi denedim. '-D' yerine '--data-binary' kullanılması sorunu çözdü. Btw bu sorun yalnızca Mac'te meydana geldi. CentOS makinesinden çağrı yaparken '-d' gayet iyi çalıştı. Bu, Mac'in satırsonu karakterinden kaynaklanıyor gibi görünüyor. Ama artık hata ayıklamak istemeyin.
Yardımın için çok teşekkürler.
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 @sorunumu çözdü (bir CalDAV sunucusuna çok satırlı bir .ics dosyası göndermek).
Sorunuza bir cevap değil, ancak mesajı ve satır sonunu içeren geçici bir dosya oluşturarak ve üzerinde çalışması için bu dosyayı curl vererek aşardım:
curl -X PUT -d @message.txt http://localhost:8000/hello
Gönderen manuel :
Verileri @ harfiyle başlatırsanız, geri kalanı verinin okunacağı bir dosya adı olmalıdır veya - curl'nin verileri stdin'den okumasını istiyorsanız. Dosyanın içeriği zaten URL olarak kodlanmış olmalıdır. Birden fazla dosya da belirtilebilir. Böylece 'foobar' adlı bir dosyadan veri göndermek --data @foobar ile yapılacaktır.
--data-binarydaha sadık bir alternatiftir -d.
-d @/path/to/temp/file.txtsatır sonu sorununu çözmez. --data-binaryyukarı bakın.
Çok kolay bir yol, ara vermek için konsolda sadece Shift-Enter tuşuna basın. Yazmak da çok okunaklı.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Satır sonunu kaldırmak için şunu yapın:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
Sendgrid'i orijinal olarak https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html burada bulunan bu kodla (aşağıda kopyalanmıştır) kullanıyordum.
\n\nGmail'de çalıştı, ancak \ngöz ardı edildi. Kaçış ve diğer önerileri ikiye katlamaya çalıştım. Ben de denedim \r\nve bu da Gmail'de çalışmadı. Not: Diğer e-posta istemcilerini test etme zahmetine girmedim, belki Gmail'e özgü bir sorundu.
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!"}]}'
Sonunda bir çözüm aramaya vazgeçti ve anahtarlı text/plainiçin text/htmlve sadece kullanılan <br />etiketler.
Birisi Sendgrid'in, etkin bir izleme pikseliniz varsa düz metni HTML'ye dönüştürmesini önerdi, bu da mantıklı. Belki yeni satırlar düz metinden html'ye dönüştürme sürecinde yok edildi. Müşterinin bir izleme pikseli istediğini varsayıyorum, bu yüzden HTML'ye geçmeye karar verdim.