curl komut satırını kullanarak xml dosyası gönder / gönder


Yanıtlar:


507

Bu soru diğer Hudson sorularınıza bağlıysa, sağladıkları komutu kullanın. Bu şekilde, komut satırından XML ile:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

Bir dosyadan okumak için biraz değiştirmeniz gerekir:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

Oku manpage . -d parametresinin özetini takiben.

-d / - Veri

(HTTP) POST isteğinde belirtilen verileri, bir kullanıcı bir HTML formunu doldurduğunda ve gönder düğmesine bastığında olduğu gibi tarayıcının yaptığı gibi HTTP sunucusuna gönderir. Bu, curl'un / x-www-form-urlencoded içerik türü uygulamasını kullanarak verileri sunucuya geçirmesine neden olur. -F / - formuyla karşılaştırın.

-d / - verileri --data-ascii ile aynıdır. Verileri tamamen ikili olarak yayınlamak için bunun yerine --data-binary seçeneğini kullanmalısınız. Bir form alanının değerini URL olarak kodlamak için --data-urlencode kullanabilirsiniz.

Bu seçeneklerden herhangi biri aynı komut satırında birden çok kez kullanılırsa, belirtilen veri parçaları bir ayırıcı & -sembolu ile birleştirilir. Böylece, '-d name = daniel -d skill = berbat' kullanılması 'name = daniel & skill = berbat' gibi görünen bir yığın oluşturur.

Verileri @ harfiyle başlatırsanız, geri kalanı verileri okumak için bir dosya adı veya - curl'ın stdin'den veri okumasını istiyorsanız. Dosyanın içeriği zaten URL kodlamalı olmalıdır. Birden fazla dosya da belirtilebilir. 'Foobar' adlı bir dosyadan veri gönderme --data @foobar ile yapılır.


2
Sayfayı okuyun. The contents of the file must already be URL-encoded.OP'nin XML dosyaları kesinlikle değildir.
Albay Panik

52
İçerik türünü belirttiğiniz sürece URL kodlaması--header "Content-Type:application/xml" beklenmez
Colonel Panic

12
Ben sadece "-d" kullanırsanız, varsayılan olarak POST kullanır, bu yüzden de "-X" kullanmaya gerek yoktur.
Tal Liron

4
Eğer curl follow yönlendirmeleri seçeneği kullanıyorsanız -L, do not kullanmak -X POSTçok istek kullanım POST yönlendirildi yapmak gibi. @Tai'nin önerdiği gibi -d'yi kullanırsanız, bu gerçekleşmez
Tristan Havelick

18
Uyardı -dşeritler dosyalarından satır kesmelerinin. Bunu önlemek için --data-binarykullanın.
Yar

189

Gönderen man , ben bu Aradığınız Droidlerin olduğuna inanıyoruz:

-F/--form <name=content>

(HTTP) Bu, kullanıcının gönder düğmesine bastığı doldurulmuş bir formun kıvrılmasını sağlar. Bu, RFC2388'e göre Content-Type çok parçalı / form verilerini kullanarak POST verilerinde kıvrılmalara neden olur. Bu, ikili dosyaların vb. Yüklenmesini sağlar. 'İçerik' bölümünü dosya olmaya zorlamak için dosya adının başına @ işareti koyun.

Örneğin, şifre dosyanızı sunucuya göndermek için, burada 'şifre' / etc / passwd komutunun girileceği form alanının adıdır:

curl -F password=@/etc/passwd www.mypasswords.com

Yani sizin durumunuzda, bu şöyle bir şey olurdu
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
Bu çözüm, gönderilen dosyayı (yukarıda seçilen çözümün aksine) adlandırabilme avantajına sahiptir ve bu nedenle örneğin birden çok dosya gönderebilirsiniz.
David Cairns

13
file=@-Dosyanızı aktarmak istiyorsanız biçim yararlıdır.
Steven Lu

2
Herhangi birinin dosya ve diğer bilgileri göndermeyi istemesi durumunda: -F tuşu = val -F tuşu = val'u istediğiniz kadar kullanın. Tüm post parametrelerini & ile ayıran tek bir büyük dize içine almak çalışmaz.
hgolov

Masaüstünden kıvırmak yoluyla yüklenen dosyaları alabilmek için alıcı web sayfasının nasıl hazırlanacağından bahsedebilir misiniz?
SexyBeast

@Cupidvogel: Diğer dosya yükleme alanları gibi; kıvrılma için özel bir işlem yoktur.
Piskvor

47

--Data seçeneğini dosya ile birlikte kullanabilirsiniz.

Soap_get.xml adlı bir dosyaya xml içeriği yazın ve istek göndermek için curl komutunu kullanın:

curl -X POST --header "İçerik-Türü: metin / xml; karakter kümesi = UTF-8" - veriler @ soap_get.xml your_url


OP yanıt satır içi metin olmayan bir dosya gönderme hakkında sorduğu için bu cevap olmalıdır.
FearlessFuture

Bu bahar web sunucusu kullanarak benim için "kaçtı" göstermek için gerekli oldu, teşekkürler!
rogerdpack

20

Jenkins 1,494, ben kullanarak Ubuntu Linux 12.10 tarihinde iş parametresine bir dosya göndermek başardı curlile --formparametreler:

curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
  -Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
  -Fsubmit=Build \
  http://user:password@jenkinsserver/job/jobname/build

Jenkins sunucusunda, tek bir parametreyi kabul eden bir iş yapılandırdım: adlı bir dosya yükleme parametresi myfileparam.

Bu curl çağrısının ilk satırı, myfileparam(işteki ile aynı) adlı bir parametreye sahip bir web formu oluşturur ; değeri, yerel dosya sistemindeki bir dosyanın içeriği olacaktır /local/path/to/your/file.txt. @Sembol öneki yerine verilen dosya adının yerel bir dosya göndermek bukle söyler.

İkinci satır, birinci satırdaki form parametreleriyle eşleşen bir JSON isteği tanımlar: adlı bir dosya parametresi myfileparam.

Üçüncü satır, formun Oluştur düğmesini etkinleştirir. Dördüncü satır, "/ build" sonekine sahip iş URL'sidir.

Bu çağrı başarılı olursa, kıvrılma geri döner 0. Başarısız olursa, hizmetteki hata veya istisna konsola yazdırılır. Bu cevap, Hudson ile ilgili eski bir blog yayınından çok şey alıyor , bu da kendi ihtiyaçlarım için yapısöktüm ve yeniden çalıştım.


6

Windows'ta kıvrılma komut satırını kullanarak XML'i Windows'ta nasıl POST yapabilirsiniz? Bunun için batch / .cmd dosyasını kullanmanız daha iyi olur:

curl -i -X POST -H "Content-Type: text/xml" -d             ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^>                ^
    ^<Transaction^>                                           ^
        ^<SomeParam1^>Some-Param-01^</SomeParam1^>            ^
        ^<Password^>SomePassW0rd^</Password^>                 ^
        ^<Transaction_Type^>00^</Transaction_Type^>           ^
        ^<CardHoldersName^>John Smith^</CardHoldersName^>     ^
        ^<DollarAmount^>9.97^</DollarAmount^>                 ^
        ^<Card_Number^>4111111111111111^</Card_Number^>       ^
        ^<Expiry_Date^>1118^</Expiry_Date^>                   ^
        ^<VerificationStr2^>123^</VerificationStr2^>          ^
        ^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^>            ^
        ^<Reference_No^>Some Reference Text^</Reference_No^>  ^
        ^<Client_Email^>john@smith.com^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"

U curl komutuyla kullanmadan önce xml dizesini nasıl biçimlendirirsiniz
Chinmoy

3

Birden fazla başlığınız varsa aşağıdakileri kullanmak isteyebilirsiniz:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url

3

Bu komutu kullanabilirsiniz:

curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json"  'API_SERVER_URL' -k 

1

Windows'ta curl kullanıyorsanız :

curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
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.