Jak zrobić zlecenie PUT z curl?

412

Jak przetestować metodę RESTful PUT (lub DELETE) za pomocą curl?

Jan
źródło

Odpowiedzi:

566

Używanie -Xflagi z dowolnym czasownikiem HTTP:

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

W tym przykładzie użyto również -dflagi do dostarczenia argumentów z żądaniem PUT.

theabraham
źródło
17
„man curl” na -X: „Zwykle nie potrzebujesz tej opcji. Wszelkiego rodzaju żądania GET, HEAD, POST i PUT są raczej wywoływane przy użyciu dedykowanych opcji wiersza poleceń.” Ale nie mogłem znaleźć innego sposobu.
Martin C. Martin
44
Rok później znalazłem sposób! curl-T
Martin C. Martin
2
Ponieważ odpowiedź Martina C. Martina zmienia się również na GET po przekierowaniu z serwera, jest to moim zdaniem bardziej użyteczna odpowiedź.
Martin
2
Aby osiągnąć GETpo przekierowaniu, dodaj parametr--location
Martin M
1
Curl 7.47 i to by mi nie działało. Odpowiedź theabraham zawsze domyślnie przedstawia zachowanie. --get (lub -G) zmusi jednak pola -d (--data) do zmiany parametrów adresu URL i działa.
James Powell,
101

Szybka odpowiedź:

W jednym wierszu polecenie curl byłoby następujące:

a) W przypadku przesyłania danych formularza:

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

b) Jeśli wysyłasz surowe dane jako json:

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

c) W przypadku wysyłania pliku z żądaniem POST:

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

Alternatywne rozwiązanie:

Możesz użyć aplikacji POSTMAN ze sklepu Chrome Store, aby uzyskać równoważne żądanie cURL. Jest to szczególnie przydatne podczas pisania bardziej skomplikowanych żądań.

W przypadku żądania w innych formatach lub dla różnych klientów, takich jak Java, PHP, możesz sprawdzić POSTMAN / komentarz poniżej.

POSTMAN, aby uzyskać kod żądania

Prateek
źródło
4
Nie mam pojęcia, dlaczego zostało to zanegowane ... Skopiowałem tutaj pomysł, jak przekazać ciało JSON do curl PUT. Również listonosz jest dość niesamowitym narzędziem do uzyskiwania kodu curl dla bardziej skomplikowanych zapytań :)
Mikael Lepistö
2
Dzięki !! Nawet ja nie mam pojęcia, dlaczego są to głosy negatywne. Może to być niechęć użytkowników do jego przyjęcia. Utworzyłem wersję wszystkich moich aplikacji REST dla urządzeń mobilnych w POSTMAN i jest to najlepsza wskazówka dotycząca wydajności, jaką mogę zasugerować każdemu, kto pracuje z REST.
Prateek
Przykład ze świata rzeczywistego, w którym przekazuję dane i parametr JSON w punkcie końcowym; curl -X PUT -H „Typ zawartości: application / json” -d '{„kwota”: „999”, „typ”: „samochód”, „id_data”: „12345”} „ host
vikramvi
1
Konieczność zainstalowania pełnej przeglądarki (jeśli nie ma Chrome) i jej rozszerzenia może być przesadą dla niektórych osób. Przynajmniej mogłeś zapewnić alternatywę dla innej, bardziej popularnej (domyślnej instalacji) przeglądarki internetowej, takiej jak Firefox, w której HttpRequester wykonuje podobną pracę.
rbaleksandar
5
Może to być odrzucone, ponieważ pytanie dotyczy zwijania się.
tuxayo
28

Przykład PUT po komentarzu Martina C. Martina:

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

Z -T(tym samym co --upload-file) curl użyje PUT dla HTTP.

Tor Klingberg
źródło
8
Niestety -Tnie zastąpi tego, -X PUTjeśli chcesz określić parametry za pomocą -dlub -F. -Twysyła zawartość pliku za pośrednictwem PUT. Aby osiągnąć GETpo przekierowaniu, dodaj parametr--location
Martin M
co jeśli plik.txt znajduje się na serwerze zdalnym?
bosari
7
curl -X PUT -d 'new_value' URL_PATH/key

gdzie,

X - opcja do użycia w poleceniu żądania

d - opcja używana w celu umieszczenia danych na zdalnym adresie URL

URL_PATH - zdalny adres URL

nowa_wartość - wartość, którą chcemy umieścić w kluczu serwera

kalyani chaudhari
źródło
5

Spóźniłem się do tego wątku, ale ja też miałem podobny wymóg. Ponieważ mój skrypt dynamicznie konstruował żądanie curl, chciałem podobnej struktury polecenia w GET, POST i PUT.

Oto, co działa dla mnie

Na żądanie PUT :

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

W przypadku żądania POST :

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

W przypadku żądania GET :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
sunitkatkar
źródło