2012-11-14 19 views
92

Próbuję wysłać żądanie DELETE za pomocą parametru adresu URL przy użyciu CURL. Robię:Parametry URL wiersza polecenia CURL

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

Jednak serwer nie widzi parametr id = 3. Próbowałem za pomocą niektórych aplikacji GUI i kiedy przekazać adres URL: http://localhost:5000/locations?id=3, to działa. Naprawdę wolałbym raczej używać CURL zamiast tej aplikacji GUI. Czy ktoś może wskazać, co robię źle?

Odpowiedz

149

Nagłówek "application/x-www-form-urlencoded", dlaczego? Wypróbuj:

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

lub

curl -X GET 'http://localhost:5000/locations?id=3' 
+15

Zadziałało. Właśnie zdałem sobie sprawę, że URL musi być pomiędzy cytatami, aby zaakceptować parametry. Ten typ MIME dotyczy adresu URL z parametrami i tego właśnie używa aplikacja GUI. Ponadto nie chcę robić 'GET'. Chcę "DELETE", a nie 'GET' i staram się przestrzegać odpowiednich standardów projektowania REST, więc używam DELETE i nie GET podczas usuwania. – darksky

+1

W moim przypadku działa tylko z podwójną ofertą, z pojedynczym cytatem w powiedzeniu curl: (1) Protokół "http nie jest obsługiwany lub wyłączany w libcurl Ale z cytatem" "działa dobrze. –

73

Felipsmartins jest poprawna.

Warto nadmienić, że tak naprawdę nie można użyć opcji -d/-, jeśli nie jest to żądanie POST. Ale nadal jest to możliwe, jeśli używasz opcji -G.

Czyli można to zrobić:

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

Tutaj jest trochę głupie, ale kiedy jesteś w linii komend i masz wiele parametrów, to jest o wiele porządniej.

Mówię to, ponieważ polecenia cURL są zazwyczaj dość długie, więc warto zrobić to w więcej niż jednym wierszu, unikając łamania 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. Chodzi mi o to, kiedy trzeba ponownie edytować poprzednie polecenie, ponieważ zsh pozwala przejść wiersz po linii. (tylko mówiąc)

Mam nadzieję, że to pomaga.

+6

Life saver! Dzięki! Mam skrypt, w którym chcę użyć --data-urlencode na GET. Dzięki temu nie musiałem ręcznie kodować moich parametrów przez kodowanie. Dzięki! –

+0

Czy sugerujesz, że -X DELETE -G jest rzeczywiście żądaniem POST? – huggie

-6

Jeśli parametr jest liczbą, to możesz też to zrobić:

curl -X DELETE localhost:5000/locations/3

Gdzie 3 "to parametr.

+6

To całkowicie zależy od implementacji serwera. – Tim

Powiązane problemy