Dosya içeriklerini cURL kullanarak gövde varlığı olarak gönderme


207

Bir web hizmetine HTTP POST göndermek için cURL komut satırı yardımcı programını kullanıyorum. Bir dosyanın içeriğini POST'un gövde varlığı olarak eklemek istiyorum. Ben vb -d </path/to/filename>gibi tip bilgileri ile diğer varyantları kullanmayı denedim --data </path/to/filename> --data-urlencode </path/to/filename>... dosya her zaman eklidir. Beden varlığı olarak buna ihtiyacım var.

Yanıtlar:


338

@filenameSözdizimini arıyorsanız , örneğin:

yeni çizgiler soy

curl --data "@/path/to/filename" http://...

yeni çizgiler tut

curl --data-binary "@/path/to/filename" http://...

=====

curl dosyadan tüm yeni satırları çıkarır. Dosyayı yeni satırlar bozulmamış olarak göndermek istiyorsanız --data-binary, --data yerine kullanın


21
Gerçek bir fantezi olmak istiyorsanız şunları yapabilirsiniz: cat file.txt | curl --data "@-" `(< url.txt )` @-kıvrılmayı stdin'den okumayı söyler. Yönlendirmeyi yalnızca (< x.txt )istediğinizi koymak için de kullanabilirsiniz . Eğer bash kullanıyorsanız.
Breedly

62
curl dosyadan tüm yeni satırları çıkarır. Dosyayı yeni satırlar bozulmamış olarak göndermek istiyorsanız --data-binary, yerine kullanın --data.
Chris

şimdi bu isteği yetkilendirmek için giriş bilgileri nasıl eklenir?
anon58192932

@ anon58192932 - Bu, sunucunun güvenlik protokolüne bağlıdır. name:valueKullanıcı adı ve şifre gibi çiftler kullanıyorsanız , hizmetin beklediği --header: "<header_name>:<header_value>"gibi eşleşen üstbilgileri tek bir dize olarak ekleyin .
Roy Hinkley

19

Sorunun cevaplandığını biliyorum, ancak benim durumumda bir metin dosyasının içeriğini Slack Webhook api'ye göndermeye çalışıyordum ve bir nedenden dolayı yukarıdaki cevap işe yaramadı. Her neyse, nihayet benim için hile yaptı:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

Bu nokta noktaları alt çizgilere (. -> _) dönüştürmez ve satırsonu tutar. Teşekkürler!
Ramon Fincken

1
Havalı, ancak dosya kıvrılma için belirtilmek yerine komut satırında patladığından soruyu cevaplamıyor. Kabuğun özel karakterlerinin hepsinin kaçması gerekip gerekmediğini merak ediyorum - ama bu konuda yeterince bilgim yok;)
Gerard ONeill

Teşekkürler, hayatımı kurtardın!
aryswisnu

Büyük bir içerik dosyası için, yukarıdaki kıvrılma işe yaramaz, curl: argument list too longbu durumda kabul edilen cevap hayat kurtarıcıdırcurl --data "@/path/to/filename" http://...
Başka bir kodlayıcı

0

Benim durumumda, @bir tür kodlama sorununa neden oldu, hala eski yolumu tercih ediyorum:

curl -d "$(cat /path/to/file)" https://example.com
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.