Jak opublikować dane JSON za pomocą Curl z terminala/linii poleceń, aby przetestować odpoczynek wiosenny?
Używam Ubuntu i zainstalowałem na nim Curl. Chcę przetestować moją aplikację Spring REST z Curl. Kod Pocztowy napisałem na stronie Java. Jednak chcę go przetestować 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 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 jest w formacie, który nie jest obsługiwany przez żądany zasób dla żądanej metody ().
Tomcat log: "POST / UI / webapp/conf/clear HTTP / 1.1" 415 1051
Jakieś pomysły na odpowiedni format polecenia Curl?
EDIT:
To jest mój kod PUT strony Javy (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;
}
20 answers
Musisz ustawić content-type NA application / json. Ale -d
wysyła Typ Content-Type application/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
:
-H "Content-Type: application/json"
Pełny przykład:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
(-H
jest skrótem od --header
, -d
dla --data
)
Zauważ, że -request POST
jest opcjonalne jeśli używasz -d
, ponieważ znacznik -d
implikuje żądanie POST.
Na Windows, rzeczy są nieco inne. Zobacz wątek komentarza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 21:43:03
Spróbuj umieścić swoje dane w pliku, powiedz body.json
, a następnie użyj
curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-24 10:04:24
Resty może Ci się przydać: https://github.com/micha/resty
Jest to owijarka okrągła, która upraszcza żądania odpoczynku z wiersza poleceń. Kierujesz go do punktu końcowego API, który udostępnia polecenia PUT I POST. (Przykłady zaadaptowane ze strony głównej)
$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json #Gets http://127.0.0.1:8080/data/blogs.json
#Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
# POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json
Ponadto często konieczne jest dodanie nagłówków typu treści. Można to jednak zrobić raz, aby ustawić domyślne dodawanie plików konfiguracyjnych według metody dla witryny: Ustawianie domyślnych opcji RESTY
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-08 14:34:39
U mnie zadziałało:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do
To było szczęśliwie odwzorowane do kontrolera sprężyny:
@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST)
public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception {
logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId());
return "JSON Received";
}
IdOnly
jest prostym POJO z właściwością id.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:47:50
Dla Windows, posiadanie pojedynczego cudzysłowu dla wartości -d
nie działało dla mnie, ale działało po zmianie na podwójny cudzysłów. Musiałem też uciec od podwójnych cudzysłowów w nawiasach klamrowych.
Oznacza to, że nie działa:
curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path
Ale działa:
curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:51:04
Jako przykład utwórz plik JSON, params.json, i dodać do niego tę treść:
[
{
"environment": "Devel",
"description": "Machine for test, please do not delete!"
}
]
Następnie uruchom polecenie:
curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-22 16:05:09
Dobrze mi to wyszło.
curl -X POST --data @json_out.txt http://localhost:8080/
Gdzie,
-X
oznacza czasownik http.
--data
oznacza dane, które chcesz wysłać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 14:31:40
Mam ten sam problem. Mogę to rozwiązać podając
-H "Content-Type: application/json; charset=UTF-8"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-15 15:45:09
Używając okna CURL, spróbuj tego:
curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-12 11:37:54
Jeśli testujesz wiele JSON send / responses przeciwko interfejsowi RESTful, możesz sprawdzić wtyczkę Postman dla Chrome (która pozwala ręcznie zdefiniować testy usług internetowych) i jej węzeł.oparty na js Newman command-line companion (który pozwala na automatyzację testów względem "zbiorów" testów Postmana.) Zarówno darmowe, jak i otwarte!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 21:40:23
Możesz użyć Postman z intuicyjnym interfejsem graficznym do złożenia cURL
polecenia.
- Install and Start Postman
- wpisz adres URL, treść wiadomości, nagłówki żądań itp. pp.
- Kliknij na
Code
- Wybierz
cURL
z listy rozwijanej - skopiuj i wklej swoje
cURL
polecenie
Uwaga: Istnieje kilka opcji automatycznego generowania żądań na rozwijanej liście, dlatego pomyślałem, że mój post był konieczny w pierwsze miejsce.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 12:47:20
To działało dobrze dla mnie, Dodatkowo przy użyciu podstawowego uwierzytelniania:
curl -v --proxy '' --basic -u Administrator:password -X POST -H "Content-Type: application/json"
--data-binary '{"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://httpbin.org/post
Oczywiście nigdy nie należy używać uwierzytelniania podstawowego bez SSL i sprawdzonego certyfikatu.
Natknąłem się dziś na to ponownie, używając cURL 7.49.1 Cygwina Dla Windows... A gdy użyjemy --data
lub --data-binary
z argumentem JSON, cURL pomylił się i zinterpretował {}
w JSON jako szablon URL. Dodanie argumentu -g
, aby wyłączyć globowanie loków, naprawiło to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:49:25
To mi pomogło:
curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-16 16:39:51
Trochę za późno na imprezę, ale nie widzę tego zamieszczonego, więc proszę bardzo, możesz też umieścić swój json w pliku i przekazać go do curl używając opcji -- file-upload poprzez standardowe wejście, tak:
echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 19:41:11
HTTPie jest zalecaną alternatywą dla curl
, ponieważ możesz zrobić tylko
$ http POST http://example.com/some/endpoint name=value name1=value1
Domyślnie mówi JSON i zajmie się zarówno ustawieniem niezbędnego nagłówka, jak i kodowaniem danych jako poprawnego JSON. Jest też:
Some-Header:value
Dla nagłówków i
name==value
Dla parametrów łańcucha zapytania. Jeśli masz dużą część danych, możesz je również odczytać z pliku, który ma być zakodowany w JSON:
[email protected]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 14:13:44
Używam poniższego formatu do testowania z serwerem WWW.
use -F 'json data'
Załóżmy, że format JSON dict:
{
'comment': {
'who':'some_one',
'desc' : 'get it'
}
}
Pełny przykład
curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:50:02
Dla danych json
curl -H "Content-Type: application/json" -X POST -d '{"params1":"value1","param2":"value2"}' http://localhost:8080/api
Jeśli chcesz zamieścić jakiś plik
curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload --insecure
W przypadku, gdy nie chcesz namieszać z https i http:
Lub po prostu
curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 06:52:48
Używam JSON w mojej aplikacji i jego proste jak:
curl -X POST -H "Content-Type:application/json" -d '{"params1":"value1","params2":"value2"} hostname:port/api
Ale jeśli masz dużą liczbę paramów, zawsze preferuj użycie pliku z ciałem żądania JSON, jak poniżej:
curl -X POST -H "Content-Type:application/json" -F "data=@/users/suchi/dekstop/JSON_request.txt" hostname:port/api
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 03:15:55
Utwórz plik JSON " MyData.json " i Dodaj treść:
[
{
"Key_one": "Value_one",
"Key_two": "Value_two",
"Key_three": "Value_three"
}
]
Następnie należy uruchomić następujące polecenie:
curl -v -H "Content-Type: application/json" -X POST --data @MyData.json -u USERNAME:PASSWORD http://localhost:8000/env/add_server
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-08 12:25:04
Możesz przekazać rozszerzenie formatu, który chcesz 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 jackson i jaxb maven w swoim pom.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 09:57:33