Curl ile Dosyada Belirtilen Verilerle POST İsteği Gönderme


241

Komut satırından Curl üzerinden bir POST isteği yapmak gerekiyor. Bu istekle ilgili veriler bir dosyada bulunur. PUT ile bu --upload-fileseçenek ile yapılabilir biliyorum .

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"


1
Üzgünüm belki ben yanlışlıkla benim sorun tarif php-curl değil, sadece linux os komut satırından curl komutu ile istek göndermek gerekir.
İsveçli

Yanıtlar:


363

--data-binaryArgüman arıyorsunuz :

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

Yukarıdaki örnekte, -ineler olduğunu görebilmeniz için tüm başlıkları yazdırır ve -X POSTbunun bir gönderi olduğunu açıkça belirtir. Bunların her ikisi de tel üzerindeki davranışı değiştirmeden güvenli bir şekilde atlanabilir. Dosyanın yolundan önce bir @sembol gelmelidir , bu nedenle curlbir dosyadan okumayı bilir.


@ ɢʜʘʂʈʀɛɔʘɴ bu durumda olurdu.xml
dennismonsewicz

54
@bölüm çok önemlidir!
Ron Klein

Yani --data-binary parametresini kullanıyoruz, ancak asıl dosya içeriği metin olabilir mi? XML genellikle ikili olmadığından.
David

8
aslında sadece -d bayrağı kullanabilirsiniz
Anatoly Yakimchuk

16
@ Tol182 -d, curlyeni satırları çıkarmaya neden olur , ancak --data-binaryolmayacaktır.
Acumenus

44

Komut satırından Curl üzerinden bir POST isteği yapmak gerekiyor. Bu istekle ilgili veriler bir dosyada bulunuyor ...

Yapmanız gereken tek şey şu --dataargümanla başlamak @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

Örneğin, bir dosyadaki verileriniz varsa, stuff.xmlo zaman şöyle bir şey yaparsınız:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

stuff.xmlDosya adı dosyasına bir akraba veya tam yol ile değiştirilebilir: @../xml/stuff.xml, @/var/tmp/stuff.xml, ...


2
Adlandırılmış bir alan göndermeniz gerektiğinde de kullanabilirsiniz --data "name@stuff".
Hermann

15

Parametre adının belirtilmesi gereken dosyayı yüklemek için form verilerini kullanıyorsanız şunları kullanabilirsiniz:

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx


Teşekkür ederim! 1. çözüm benim için çalışmadı. parametername=gerçekten bana yardımcı oldu :)
Cyborg

3

Cevapların çoğu burada mükemmel, ama benim özel sorunum için buraya indiğimde, POST yöntemini kullanarak ikili dosyayı (XLSX forma sayfası) yüklemeliyim, eksik bir şey görüyorum , yani genellikle sadece yüklediğiniz dosya değil, daha formu veri elemanları , yorum yapma gibi dosya veya etiketlere dosyaya benim olduğu gibi vb. Bu yüzden, bunu benim kullanım durumum olduğu için buraya eklemek istiyorum, böylece başkalarına yardımcı olabilir.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

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.