Wie mache ich eine PUT-Anfrage mit Curl?

411

Wie teste ich eine RESTful PUT (oder DELETE) Methode mit Curl?

John
quelle

Antworten:

565

Verwenden des -XFlags mit einem beliebigen HTTP-Verb:

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

In diesem Beispiel wird das -dFlag auch verwendet , um Argumente für Ihre PUT-Anforderung bereitzustellen.

Theabraham
quelle
17
"man curl" auf -X: "Normalerweise benötigen Sie diese Option nicht. Alle Arten von GET-, HEAD-, POST- und PUT-Anforderungen werden eher mithilfe dedizierter Befehlszeilenoptionen aufgerufen." Aber ich konnte keinen anderen Weg finden.
Martin C. Martin
44
Ein Jahr später fand ich einen Weg! Curl -T
Martin C. Martin
2
Da sich die Antwort von Martin C. Martin nach einer Umleitung vom Server auch zu GET ändert, ist dies meiner Meinung nach die nützlichere Antwort.
Martin
2
Um das GETnach einer Umleitung zu erreichen, fügen Sie den Parameter--location
Martin M
1
Curl 7.47 und das würde bei mir nicht funktionieren. Die Antwort von theabraham ist standardmäßig das Post-Verhalten. --get (oder -G) erzwingt jedoch, dass die Felder -d (--data) zu URL-Parametern werden, und funktioniert.
James Powell
100

Schnelle Antwort:

In einer einzelnen Zeile wäre der Befehl curl:

a) Beim Senden von Formulardaten:

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

b) Wenn Rohdaten als json gesendet werden:

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

c) Wenn Sie eine Datei mit einer POST-Anfrage senden:

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

Alternative Lösung:

Sie können die POSTMAN- App aus dem Chrome Store verwenden, um die entsprechende cURL-Anforderung zu erhalten. Dies ist besonders nützlich, wenn Sie kompliziertere Anforderungen schreiben.

Für die Anfrage mit anderen Formaten oder für verschiedene Clients wie Java, PHP können Sie POSTMAN / Kommentar unten überprüfen.

POSTMAN, um den Anforderungscode zu erhalten

Prateek
quelle
4
Keine Ahnung, warum dies abgelehnt wurde ... Ich habe hier die Idee kopiert, wie JSON-Body für Curl-PUT übergeben werden soll. Auch Postbote ist ein ziemlich tolles Tool, um Curl-Code für kompliziertere Abfragen zu bekommen :)
Mikael Lepistö
2
Vielen Dank !! Auch ich habe keine Ahnung warum über die Downvotes. Könnte die Zurückhaltung der Benutzer sein, es zu übernehmen. Ich habe in POSTMAN eine Antwort auf alle meine REST-APIs für Mobilgeräte erstellt. Dies ist der beste Produktivitätstipp, den ich jedem empfehlen kann, der mit REST arbeitet.
Prateek
Beispiel aus der realen Welt, in dem ich json-Daten und -Parameter am Endpunkt übergebe; curl -X PUT -H "Inhaltstyp: application / json" -d '{"Betrag": "999", "Typ": "Auto", "Eltern-ID": "12345"}' localhost: 8080 / transactionervice / Transaktion / 2222
Vikramvi
1
Die Installation eines vollständigen Browsers (wenn man kein Chrome hat) und einer Erweiterung dafür könnte für manche Leute imho ein Overkill sein. Zumindest hätten Sie eine Alternative für einen anderen gängigen (Standardinstallations-) Webbrowser wie Firefox bereitstellen können, bei dem der HttpRequester einen ähnlichen Job ausführt.
Rbaleksandar
5
Es könnte herabgestimmt werden, weil es um Locken geht.
Smoking
28

Ein Beispiel für einen PUT nach dem Kommentar von Martin C. Martin:

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

Mit -T(wie --upload-file) Curl wird PUT für HTTP verwendet.

Tor Klingberg
quelle
8
Leider -Tist dies kein Ersatz dafür, -X PUTob Sie Parameter mit -doder angeben möchten -F. -Tsendet den Inhalt einer Datei per PUT. Um das GETnach einer Umleitung zu erreichen, fügen Sie den Parameter hinzu--location
Martin M
Was ist, wenn sich filename.txt auf dem Remote-Server befindet?
Bosari
7
curl -X PUT -d 'new_value' URL_PATH/key

wo,

X - Option für den Anforderungsbefehl

d - Option, die verwendet werden soll, um Daten auf die Remote-URL zu setzen

URL_PATH - Remote-URL

new_value - Wert, den wir auf den Serverschlüssel setzen wollen

kalyani chaudhari
quelle
5

Ich bin zu spät zu diesem Thread, aber ich hatte auch eine ähnliche Anforderung. Da mein Skript die Anforderung für Curl dynamisch konstruierte, wollte ich eine ähnliche Struktur des Befehls für GET, POST und PUT.

Hier ist was für mich funktioniert

Für PUT- Anfrage:

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

Für POST- Anfrage:

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

Für GET- Anfrage:

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
sunitkatkar
quelle