Parameter URL Baris Perintah CURL

186

Saya mencoba mengirim DELETEpermintaan dengan parameter url menggunakan CURL. Saya lakukan:

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

Namun, server tidak melihat parameter id = 3. Saya mencoba menggunakan beberapa aplikasi GUI dan ketika saya melewatkan url sebagai:, http://localhost:5000/locations?id=3ia berfungsi. Saya lebih suka menggunakan CURL daripada aplikasi GUI ini. Adakah yang bisa menunjukkan apa yang saya lakukan salah?

Langit yang gelap
sumber

Jawaban:

269

header "application / x-www-form-urlencoded", mengapa? Cobalah:

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

atau

curl -X GET 'http://localhost:5000/locations?id=3'
felipsmartins
sumber
30
Itu berhasil. Saya baru sadar URL harus berada di antara tanda kutip untuk menerima parameter. Jenis MIME itu untuk URL dengan parameter dan itulah yang digunakan aplikasi GUI. Juga, saya tidak ingin melakukannya GET. Saya ingin DELETEdan tidak GETdan saya mencoba mengikuti standar desain REST yang tepat jadi saya menggunakan DELETE dan bukan GET saat menghapus.
darksky
1
Dalam kasus saya ini hanya bekerja dengan kutip ganda, dengan kutip tunggal dalam kata curl: (1) Protokol 'http tidak didukung atau dinonaktifkan di libcurl Tetapi dengan kutip "" bekerja dengan baik.
Jeff_Alieffson
150

Felipsmartins benar.

Perlu disebutkan bahwa itu karena Anda tidak dapat benar-benar menggunakan opsi data -d / - jika ini bukan permintaan POST. Tapi ini masih mungkin jika Anda menggunakan opsi -G.

Yang berarti Anda dapat melakukan ini:

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

Ini sedikit konyol tetapi ketika Anda berada di baris perintah dan Anda memiliki banyak parameter, ini jauh lebih rapi.

Saya mengatakan ini karena perintah CURL biasanya cukup panjang, sehingga layak untuk membuatnya lebih dari satu baris lolos dari jeda baris.

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

Ini jelas jauh lebih nyaman jika Anda menggunakan zsh. Maksud saya ketika Anda perlu mengedit kembali perintah sebelumnya karena zsh memungkinkan Anda melakukan baris per baris. (hanya mengatakan)

Semoga ini bisa membantu.

Mig
sumber
11
Penolong! Terima kasih sobat! Saya memiliki skrip tempat saya ingin menggunakan --data-urlencode pada GET. Ini membuatnya jadi saya tidak perlu secara manual url-encode parameter saya. Terima kasih!
Nathan Wallace
3
Apakah Anda menyiratkan bahwa -X DELETE -G benar-benar permintaan POST?
huggie
1
`-G, --get Letakkan data posting di URL dan gunakan GET` Tidak, itu hanya menambahkan data posting ke url, -X [metode] diutamakan (sumber: curl --help dan pengalaman)
DownloadPizza
Bagaimana ini bisa berbelit-belit. Orang bisa berasumsi --data-urlencode menambahkan data ke URL tanpa pengecualian tetapi sekarang Anda harus menggabungkannya dengan --getuntuk membuatnya benar-benar berfungsi.
Jaakko