Curl ile PUT isteği nasıl yapılır?


412

RESTful PUT (veya DELETE) yöntemini curl kullanarak nasıl test edebilirim?

Yanıtlar:


566

-XBayrağı istediğiniz HTTP fiiliyle kullanma :

curl -X PUT -d arg=val -d arg2=val2 localhost:8080

Bu örnek ayrıca -dPUT isteğinizle bağımsız değişkenler sağlamak için bayrağı kullanır .


17
-x: "man curl": "Normalde bu seçeneğe ihtiyacınız yoktur. Her türlü GET, HEAD, POST ve PUT istekleri özel komut satırı seçenekleri kullanılarak çağrılır." Ama başka bir yol bulamadım.
Martin C. Martin

44
Bir yıl sonra bir yol buldum! kıvırmak -T
Martin

2
Martin C. Martin'in yanıtı, sunucudan bir yönlendirmeden sonra GET olarak da değiştiği için, bu bence daha yararlı bir yanıt.
Martin

2
GETYönlendirmeden sonra elde etmek için , şu parametreyi ekleyin--location
Martin M

1
Curl 7.47 ve bu benim için işe yaramaz. theabraham'ın cevabı her zaman varsayılan olarak post davranışıdır. --get (veya -G), -d (--data) alanlarını url parametresi olmaya zorlar ve çalışır.
James Powell

101

Hızlı cevap:

Tek bir satırda curl komutu şöyle olur:

a) Form verileri gönderiyorsanız:

curl -X PUT -H "Content-Type: multipart/form-data;" -F "key1=val1" "YOUR_URI"

b) Ham verileri json olarak gönderiyorsanız:

curl -X PUT -H "Content-Type: application/json" -d '{"key1":"value"}' "YOUR_URI"

c) POST isteği olan bir dosya gönderiyorsanız:

curl -X POST "YOUR_URI" -F 'file=@/file-path.csv'

Alternatif çözüm:

Eşdeğer cURL isteğini almak için Chrome Mağazası'ndan POSTMAN uygulamasını kullanabilirsiniz . Bu özellikle daha karmaşık istekler yazarken kullanışlıdır.

Diğer biçimlerle veya java, PHP gibi farklı istemcilerle ilgili istek için POSTMAN / comment'a göz atabilirsiniz.

POSTMAN istek kodunu alacak


4
Bunun neden reddedildiğine dair bir fikrim yok ... Buraya curl PUT için JSON gövdesini nasıl geçireceğim fikrini kopyaladım. Ayrıca postacı daha karmaşık sorgular için kıvırmak kodu almak için oldukça harika bir araç :)
Mikael Lepistö

2
Teşekkürler !! Hatta neden aşağı oylar hakkında hiçbir fikrim yok. Kullanıcıların benimsemeye isteksiz olabilir. POSTMAN'de mobil cihazlar için tüm REST apislerimin bir yanıtını oluşturdum ve bu, REST ile çalışan herkese önerebileceğim en iyi verimlilik ipucu.
Prateek

Bitiş noktasında json veri ve parametresini geçirdiğim gerçek dünya örneği; curl -X PUT -H "İçerik Tipi: application / json" -d '{"miktar": "999", "tür": "araba", "parent_id": "12345"}' localhost: 8080 / transactionervice / işlem / 2222
vikramvi

1
Tam bir tarayıcı (Chrome'da yoksa) ve bunun için bir uzantı yüklemeniz bazı kişiler için aşırıya kaçabilir. En azından HttpRequester'ın benzer bir iş yaptığı Firefox gibi daha yaygın bir (varsayılan kurulum) web tarayıcısı için bir alternatif sunmuş olabilirsiniz.
rbaleksandar

5
Sorunun kıvrılma ile ilgili olması nedeniyle indirgenebilir.
tuxayo

28

Martin C. Martin'in yorumunu takip eden bir örnek PUT:

curl -T filename.txt http://www.example.com/dir/

-T( İle aynı --upload-file) curl HTTP için PUT kullanır.


8
Ne yazık ki, -Tyerine geçmez -X PUTsen parametreleri belirlemek istiyorsanız -dveya -F. -Tbir dosyanın içeriğini PUT ile gönderir. GETYönlendirmeden sonra ulaşmak için , şu parametreyi ekleyin--location
Martin M

dosyaadı.txt uzak sunucudaysa ne olur?
bosari

7
curl -X PUT -d 'new_value' URL_PATH/key

nerede,

X - istek komutu için kullanılacak seçenek

d - verileri uzak url'ye koymak için kullanılacak seçenek

URL_PATH - uzak URL

new_value - sunucunun anahtarına koymak istediğimiz değer


5

Bu konuya geç kaldım, ama ben de benzer bir gereksinimim vardı. Betiğim dinamik olarak kıvrılma isteğini oluşturduğundan, GET, POST ve PUT genelinde benzer bir komut yapısı istedim.

İşte benim için işe yarayan

İçin PUT isteği:

curl --request PUT --url http://localhost:8080/put --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

For POST isteği:

curl --request POST --url http://localhost:8080/post --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

İçin GET isteği:

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
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.