Używam Ubuntu i zainstalowałem na nim cURL . Chcę przetestować moją wiosenną aplikację REST za pomocą cURL. Napisałem mój kod POST po stronie Java. Chcę jednak przetestować to za pomocą cURL. Próbuję opublikować dane JSON. Przykładowe dane są takie:
{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}
Używam tego polecenia:
curl -i \
-H "Accept: application/json" \
-H "X-HTTP-Method-Override: PUT" \
-X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
http://localhost:8080/xx/xxx/xxxx
Zwraca ten błąd:
HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT
Opis błędu jest następujący:
Serwer odrzucił to żądanie, ponieważ jednostka żądania ma format nieobsługiwany przez żądany zasób dla żądanej metody ().
Dziennik Tomcat: „POST / ui / webapp / conf / clear HTTP / 1.1” 415 1051
Jaki jest prawidłowy format polecenia cURL?
To jest mój PUT
kod boczny Java (przetestowałem GET i DELETE i działają):
@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
configuration.setName("PUT worked");
//todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
return configuration;
}
json
rest
spring-mvc
curl
http-headers
kamaci
źródło
źródło
Odpowiedzi:
Musisz ustawić typ zawartości na application / json. Ale
-d
wysyła Content-Typeapplication/x-www-form-urlencoded
, który nie jest akceptowany po stronie Springa.Patrząc na stronę podręcznika curl , myślę, że możesz użyć
-H
:Pełny przykład:
(
-H
jest skrótem od--header
,-d
dla--data
)Pamiętaj, że
-request POST
jest to opcjonalne, jeśli używasz-d
, ponieważ-d
flaga oznacza żądanie POST.W systemie Windows sprawy wyglądają nieco inaczej. Zobacz temat komentarza.
źródło
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Również ta odpowiedź: stackoverflow.com/questions/18314796/…Spróbuj umieścić swoje dane w pliku, powiedz,
body.json
a następnie użyjźródło
--data-binary
opcji zamiast--data
. Można się spodziewać, że klient wysyła dane takie, jakie są, ale--data
usuwa CR i LF z danych wejściowych.@
znak przed nazwą pliku, w przeciwnym razie nie zadziała. Właśnie spędziłem 20 minut waląc głową w to badziewie ...Może być przydatny: https://github.com/micha/resty
Jest to okrągły CURL, który upraszcza żądania REST wiersza poleceń. Wskazujesz go na punkt końcowy interfejsu API, a on daje komendy PUT i POST. (Przykłady dostosowane ze strony głównej)
Ponadto często konieczne jest dodawanie nagłówków typu zawartości. Możesz to zrobić tylko raz, aby ustawić domyślną wartość dodawania plików konfiguracyjnych dla poszczególnych metod dla witryny: Ustawianie domyślnych opcji RESTY
źródło
W systemie Windows posiadanie pojedynczego cudzysłowu dla tej
-d
wartości nie działało dla mnie, ale działało po zmianie na podwójny cudzysłów. Musiałem także uniknąć podwójnych cudzysłowów w nawiasach klamrowych.Oznacza to, że następujące działania nie działały:
Ale następujące działały:
źródło
Działa dla mnie przy użyciu:
Na szczęście został zmapowany do kontrolera Spring:
IdOnly
jest prostym POJO z właściwością id.źródło
Na przykład utwórz plik JSON, params.json i dodaj do niego następującą treść:
Następnie uruchom to polecenie:
źródło
Właśnie napotkałem ten sam problem. Mógłbym to rozwiązać, określając
źródło
To działało dla mnie dobrze.
Gdzie,
-X
Oznacza czasownik http.--data
Oznacza dane, które chcesz wysłać.źródło
-X POST
to zbędne w tym przykładzieMożesz użyć Postmana z intuicyjnym GUI, aby skompletować swoje
cURL
polecenie.Code
cURL
z rozwijanej listycURL
polecenieUwaga: Istnieje kilka opcji automatycznego generowania żądań na liście rozwijanej, dlatego właśnie uważałem, że mój post jest konieczny.
źródło
Korzystając z CURL Windows, spróbuj tego:
źródło
Możesz użyć listonosza, aby przekonwertować na CURL
źródło
HTTPie jest zalecaną alternatywą,
curl
ponieważ możesz to zrobićDomyślnie mówi JSON i obsłuży zarówno ustawienie niezbędnego nagłówka, jak i kodowanie danych jako prawidłowego JSON. Jest również:
dla nagłówków i
dla parametrów ciągu zapytania. Jeśli masz dużą część danych, możesz także odczytać je z pliku, jeśli ma być zakodowany w JSON:
źródło
Jeśli testujesz wiele wysyłanych / odpowiedzi JSON na interfejsie RESTful, możesz wypróbować wtyczkę Postman dla Chrome (która pozwala ręcznie definiować testy usług internetowych) i jej komendę Newman opartą na Node.js -line towarzysz (który pozwala zautomatyzować testy względem „kolekcji” testów Listonosza). Zarówno darmowy, jak i otwarty!
źródło
Działa to dla mnie dobrze, wykorzystując dodatkowo uwierzytelnianie BASIC:
Oczywiście nigdy nie należy używać uwierzytelniania BASIC bez SSL i sprawdzonego certyfikatu.
Znowu się z tym spotkałem, używając cURL 7.49.1 Cygwina dla Windows ... A kiedy używałem
--data
lub--data-binary
z argumentem JSON, cURL się pomylił i zinterpretowałby to{}
w JSON jako szablon URL.-g
Naprawiono to, dodając argument wyłączający globowanie cURL.Zobacz także Przekazywanie adresu URL z nawiasami do zwijania się .
źródło
Możesz także umieścić swoją zawartość JSON w pliku i przekazać ją do zwijania za pomocą
--file-upload
opcji za pomocą standardowego wejścia, jak poniżej:źródło
To działało dla mnie:
źródło
Korzystam z poniższego formatu do testowania na serwerze WWW.
Załóżmy ten format dict JSON:
Pełny przykład
źródło
Użyj opcji -d, aby dodać ładunek
Dodatkowo:
użyj -X POST, aby użyć metody POST
użyj -H 'Accept: application / json', aby dodać nagłówek typu accept
użyj -H „Content-Type: application / json”, aby dodać nagłówek typu zawartości
źródło
To działało dla mnie na Windows10
źródło
Sprawdź to narzędzie . Pomaga w łatwym tworzeniu fragmentów curl.
źródło
Oto inny sposób na zrobienie tego, jeśli chcesz uwzględnić dane dynamiczne.
źródło
Wiem, wiele odpowiedzi na to pytanie, ale chciałem się podzielić, gdzie miałem problem:
Widzisz, zrobiłem wszystko dobrze, tylko jedna rzecz - „@” Przegapiłem przed ścieżką do pliku JSON.
Znalazłem jeden odpowiedni dokument w Internecie - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Mam nadzieję, że to może pomóc nielicznym. dzięki
źródło
Jeśli skonfigurujesz SWAGGER do aplikacji wiosennego rozruchu i wywołasz tam dowolny interfejs API ze swojej aplikacji, zobaczysz również Żądanie CURL.
Myślę, że jest to łatwy sposób generowania żądań za pomocą CURL.
źródło
Możesz przekazać rozszerzenie żądanego formatu jako koniec adresu URL. jak http: // localhost: 8080 / xx / xxx / xxxx .json
lub
http: // localhost: 8080 / xx / xxx / xxxx .xml
Uwaga: musisz dodać zależności pomnika jackson i jaxb do pom.
źródło