URL-Parameter der CURL-Befehlszeile

186

Ich versuche, eine DELETEAnfrage mit einem URL-Parameter mit CURL zu senden . Ich mache:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

Der Server sieht jedoch nicht den Parameter id = 3. Ich habe versucht, eine GUI-Anwendung zu verwenden, und wenn ich die URL als: übergebe http://localhost:5000/locations?id=3, funktioniert es. Ich würde wirklich lieber CURL als diese GUI-Anwendung verwenden. Kann jemand bitte darauf hinweisen, was ich falsch mache?

dunkler Himmel
quelle

Antworten:

269

"application / x-www-form-urlencoded" -Header, warum? Versuch es:

curl -X DELETE 'http://localhost:5000/locations?id=3'

oder

curl -X GET 'http://localhost:5000/locations?id=3'
Felipsmartine
quelle
30
Es funktionierte. Ich habe gerade festgestellt, dass die URL zwischen Anführungszeichen stehen muss, um Parameter zu akzeptieren. Dieser MIME-Typ ist für eine URL mit Parametern und wird von der GUI-Anwendung verwendet. Auch will ich nicht machen GET. Ich möchte DELETEund nicht GETund ich versuche, die richtigen REST-Designstandards zu befolgen, daher verwende ich beim Löschen DELETE und nicht GET.
Darksky
1
In meinem Fall funktioniert es nur mit doppeltem Anführungszeichen, mit einfachem Anführungszeichen in sagt curl: (1) Protokoll 'http wird in libcurl nicht unterstützt oder deaktiviert, aber mit "" Anführungszeichen funktioniert es einwandfrei.
Jeff_Alieffson
149

Felipsmartins ist richtig.

Es ist erwähnenswert, dass dies daran liegt, dass Sie die Option -d / - data nicht wirklich verwenden können, wenn dies keine POST-Anforderung ist. Dies ist jedoch weiterhin möglich, wenn Sie die Option -G verwenden.

Was bedeutet, dass Sie dies tun können:

curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'

Hier ist es ein bisschen albern, aber wenn Sie in der Befehlszeile sind und viele Parameter haben, ist es viel aufgeräumter.

Ich sage dies, weil cURL-Befehle normalerweise ziemlich lang sind. Es lohnt sich also, sie auf mehr als einer Zeile auszuführen, die den Zeilenumbrüchen entgeht.

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

Dies ist offensichtlich viel komfortabler, wenn Sie zsh verwenden. Ich meine, wenn Sie den vorherigen Befehl erneut bearbeiten müssen, weil Sie mit zsh Zeile für Zeile gehen können. (nur sagen)

Ich hoffe es hilft.

Mig
quelle
11
Lebensretter! Danke, Mann! Ich habe ein Skript, in dem ich --data-urlencode auf einem GET verwenden möchte. Dadurch musste ich meine Parameter nicht manuell per URL codieren. Vielen Dank!
Nathan Wallace
3
Wollen Sie damit sagen, dass -X DELETE -G wirklich eine POST-Anfrage ist?
Huggie
1
`-G, --get Fügen Sie die Post-Daten in die URL ein und verwenden Sie GET` Nein, es werden nur die Post-Daten zur URL hinzugefügt. -X [Methode] hat Vorrang (Quelle: curl --help and Experience)
DownloadPizza
Wie kann das so verworren sein? Man könnte annehmen, dass --data-urlencode die Daten ausnahmslos zur URL hinzugefügt werden, aber jetzt müssen Sie sie mit kombinieren --get, damit sie tatsächlich funktionieren.
Jaakko