Curl ile bir satır sonu göndermek için aşağıdakileri denedim, ancak curl ile \n
yorumlanmadı.
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-binary
Seçenek bunu yapmaz.
-d @message.txt
Diğ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 n
yerine kıvrılıp ziyade bir satır "my message\n"
. Bash, \n
ve 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"
.
\n
JavaScript 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 <<EOF
yapıyor
@-
curl'ye standart girişten gelen girdiyi tüketmesini söyler ve <<EOF
bash için akış sonu göstergesidir. Daha sonra EOF
veri 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. %0A
Kodlanmış 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ı message
değ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-binary
daha sadık bir alternatiftir -d
.
-d @/path/to/temp/file.txt
satır sonu sorununu çözmez. --data-binary
yukarı 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\n
Gmail'de çalıştı, ancak \n
göz ardı edildi. Kaçış ve diğer önerileri ikiye katlamaya çalıştım. Ben de denedim \r\n
ve 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/plain
için text/html
ve 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.