Parametry adresu URL wiersza poleceń CURL

186

Próbuję wysłać DELETEżądanie z parametrem adresu URL za pomocą CURL. Robię:

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

Jednak serwer nie widzi parametru id = 3. Próbowałem użyć jakiejś aplikacji GUI i kiedy przekazuję adres URL jako:, http://localhost:5000/locations?id=3działa. Naprawdę wolałbym używać CURL niż tej aplikacji GUI. Czy ktoś może wskazać, co robię źle?

ciemne niebo
źródło

Odpowiedzi:

269

nagłówek „application / x-www-form-urlencoded”, dlaczego? Wypróbuj to:

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

lub

curl -X GET 'http://localhost:5000/locations?id=3'
felipsmartins
źródło
30
Zadziałało. Właśnie zdałem sobie sprawę, że adres URL musi znajdować się między cudzysłowami, aby zaakceptować parametry. Ten typ MIME dotyczy adresu URL z parametrami i właśnie tego używa aplikacja GUI. Nie chcę też tego robić GET. Chcę DELETEi nie GETi staram się przestrzegać odpowiednich standardów projektowania REST, więc używam DELETE, a nie GET podczas usuwania.
darksky
1
W moim przypadku działa tylko z podwójnym cytatem, z pojedynczym cytatem w mówi curl: (1) Protokół http nie jest obsługiwany lub wyłączony w libcurl. Ale z "" cytowaniem działa dobrze.
Jeff_Alieffson,
150

Felipsmartins ma rację.

Warto wspomnieć, że dzieje się tak, ponieważ tak naprawdę nie można użyć opcji -d / - data, jeśli nie jest to żądanie POST. Ale nadal jest to możliwe, jeśli użyjesz opcji -G.

Co oznacza, że ​​możesz to zrobić:

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

Tutaj jest to trochę głupie, ale kiedy jesteś w linii poleceń i masz wiele parametrów, jest o wiele ładniej.

Mówię to, ponieważ polecenia cURL są zwykle dość długie, dlatego warto umieścić je w więcej niż jednej linii, która ucieka przed podziałem linii.

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

Jest to oczywiście o wiele wygodniejsze, jeśli używasz zsh. Mam na myśli, kiedy musisz ponownie edytować poprzednie polecenie, ponieważ zsh pozwala ci przechodzić linia po linii. (tylko mówię)

Mam nadzieję, że to pomoże.

Mig
źródło
11
Oszczędzanie życia! Dzięki! Mam skrypt, w którym chcę użyć --data-urlencode na GET. Dzięki temu nie muszę ręcznie kodować moich parametrów w adresie URL. Dzięki!
Nathan Wallace,
3
Czy sugerujesz, że -X DELETE -G jest naprawdę żądaniem POST?
huggie
1
`-G, --get Umieść dane posta w adresie URL i użyj GET` Nie, po prostu dodaje dane postu do adresu URL, -X [metoda] ma pierwszeństwo (źródło: curl --help i doświadczenie)
DownloadPizza
Jak to może być tak skomplikowane. Można założyć, że --data-urlencode dodaje dane do adresu URL bez wyjątków, ale teraz trzeba je połączyć z, --getaby faktycznie działało.
Jaakko,