Kaip POST JSON duomenis naudoti „Curl“ iš terminalo / komandų eilutės, kad patikrintumėte „Spring REST“?

Aš naudoju Ubuntu ir įdiegiau Curl. Noriu išbandyti „Spring REST“ programą, naudodamas „Curl“. Aš parašiau savo POST kodą „Java“ pusėje. Tačiau noriu jį patikrinti naudojant „Curl“. Bandau skelbti JSON duomenis. Duomenų pavyzdys yra toks:

 {"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} 

Naudoju šią komandą:

 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 

Ji grąžina šią klaidą:

 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 

Klaidos aprašymas:

Serveris atsisakė šio prašymo, nes užklausos objektas yra tokio formato, kurio neprašo reikalaujamų išteklių prašomam metodui ().

„Tomcat“ žurnalas: „POST / ui / webapp / conf / clear HTTP / 1.1“ 415 1051

Ar idėjos apie teisingą Curl komandos formatą?

EDIT:

Tai mano „PUT“ kodas „Java“ pusėje (išbandžiau „GET“ ir „DELETE“ ir jie veikia)

 @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; } 
2266
24 авг. nustatykite kamaci 24 rug . 2011-08-24 11:51 '11, 11:51, 2011-08-24 11:51
@ 18 atsakymų

Turite nustatyti turinio tipą programai / json. Bet -d siunčia application/x-www-form-urlencoded turinio tipo application/x-www-form-urlencoded , kuri nepriimama pavasario pusėje.

Žiūrėdami į -H curl puslapį , manau, galite naudoti -H :

 -H "Content-Type: application/json" 

Visas pavyzdys:

 curl --header "Content-Type: application/json" \ --request POST \ --data '{"username":"xyz","password":"xyz"}' \ http://localhost:3000/api/login 

( -H sutrumpinta už --Header , -d - --data )

Atkreipkite dėmesį, kad -request POST yra neprivalomas, jei naudojate -d , nes -d vėliava reiškia POST užklausą.


Windows sistemoje viskas šiek tiek skiriasi. Žr. Komentarų temą.

3546
24 авг. atsakymas, kurį pateikė Sean Patrick Floyd 2011-08-24 12:12 '11, 12:12, 2011-08-24 12:12

Pabandykite įdėti duomenis į failą, tarkim, body.json , tada naudokite

border=0
 curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf 
461
24 авг. Atsakymą pateikė „ Typisch“ 24 d. 2011-08-24 13:04 '11, 13:04, 2011-08-24 13:04

Naudinga poilsiui: https://github.com/micha/resty

Tai apvyniojimas aplink CURL, kuris supaprastina REST komandinės eilutės nurodymus. Jūs nukreipiate jį į API galutinį tašką, o tai suteikia PUT ir POST komandas. (Pavyzdžiai pateikti pagrindiniame puslapyje)

 $ 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 

Be to, dažnai reikia pridėti turinio tipo antraštes. Tačiau galite tai padaryti, jei norite nustatyti numatytąją reikšmę kiekvienam metodui pridedant kiekvienos svetainės konfigūracijos failus: numatytasis nustatymas yra RESTY parinktys

90
12 янв. Atsakymas yra suteiktas mo-seph 12 sausis 2012-01-12 22:10 '12, 10:10 pm 2012-01-12 22:10

Jis dirbo man naudodamasis:

 curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do 

Jis buvo laimingai susietas su pavasario valdikliu:

 @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 yra paprastas POJO , turintis id nuosavybę.

71
19 апр. atsakymą pateikė Luisas balandžio 19 d 2012-04-19 19:00 „12 val. 19 val. 2012-04-19 19:00

„Windows“ atveju, kai man buvo viena citata -d vertei, tačiau ji dirbo po pakeitimo dvigubai citatai. Man taip pat reikėjo vengti dvigubų kabučių garbanotose petnešose.

Tai reiškia, kad toliau neveikia:

 curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path 

Tačiau šie darbai:

 curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path 
66
01 июля '14 в 1:12 2014-07-01 01:12 atsakymas pateikiamas venkatnzui liepos 1 d. 14 d. 1:12 2014-07-01 01:12

Pvz., Sukurkite JSON failą, params.json ir pridėkite šį turinį:

 [ { "environment": "Devel", "description": "Machine for test, please do not delete!" } ] 

Tada paleisite šią komandą:

 curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server 
42
06 янв. Atsakymą pateikė Eduardo Cerqueira sausio 06 d 2016-01-06 02:10 '16 at 2:10 AM 2016-01-06 02:10

Tai gerai dirbo man.

 curl -X POST --data @json_out.txt http://localhost:8080/ 

Kur

-X reiškia „http“ veiksmažodį.

--data Nurodo duomenis, kuriuos norite siųsti.

33
01 июля '15 в 17:31 2015-07-01 17:31 atsakymas pateikiamas felipealves.gnu liepos 1 d. 15 val. 17:31 2015-07-01 17:31

Aš tiesiog bėgo į tą pačią problemą. Tai galėčiau išspręsti nurodydamas

 -H "Content-Type: application/json; charset=UTF-8" 
29
15 нояб. Atsakymą pateikė Steffen Roller lapkričio 15 d 2011-11-15 18:45 '11, 18:45, 2011-11-15 18:45

Naudokite „Windows CURL“:

 curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee 
24
21 дек. Atsakymą pateikė Márcio Brener 21 gruodis. 2014-12-21 02:45 '14, 2:45 2014-12-21 02:45

Postman“ galite naudoti su savo intuityvia GUI, kad sukurtumėte savo cURL komandą.

  1. Įdiekite ir paleiskite paštą
  2. Įveskite URL, pranešimo tekstą, užklausos antraštes ir kt.
  3. Spustelėkite Code
  4. Išskleidžiamajame sąraše pasirinkite cURL .
  5. nukopijuokite ir įklijuokite savo cURL komandą

Pastaba Išskleidžiamajame sąraše yra kelios automatinio užklausų generavimo parinktys, todėl nusprendžiau, kad mano skelbimas pirmiausia buvo reikalingas.

18
25 сент. atsakymą pateikė kiltek 25 sep . 2017-09-25 15:47 '17 prie 15:47 2017-09-25 15:47

Jei išbandysite daugybę JSON pranešimų / atsakymų į „RESTful“ sąsają, galite patikrinti „Chrome“ „ Postman“ papildinį (kuris leidžia rankiniu būdu nustatyti žiniatinklio paslaugų testus) ir „Node.js“ pagrįstą „ Newman“ kompanioną (kuris leidžia automatizuoti bandymus su bandymų rinkiniais Pašto siuntėjas.) Tiek laisvas, tiek atviras!

16
23 мая '14 в 16:34 2014-05-23 16:34 atsakymą pateikė „ ftexperts“ gegužės 23 d., 14 d., 4:34 val. 2014-05-23 16:34

Tai veikė man, be to, naudojant BASIC autentifikavimą:

 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 

Žinoma, niekada neturėtumėte naudoti BASIC autentifikavimo be SSL ir patvirtinto sertifikato.

Šiandien aš bėgo į „Cygwin“ CURL 7.49.1 „Windows“. Ir, naudojant „ --data arba „ --data-binary su JSON argumentu, „CURL“ supainiojo ir interpretavo {} JSON kaip URL modelį. Įtraukus argumentą -g kad išjungtumėte CURL globbing fiksuotą.

Taip pat žr. URL pateikimą su garbanojimo skliausteliais .

13
06 июня '13 в 2:24 2013-06-06 02:24 atsakymas davenpcj birželio 06 d. 13 val. 2:24 2013-06-06 02:24

Šiek tiek vėlai šaliai, bet nematau, kad jis būtų paskelbtas, todėl čia galite pridėti savo „Json“ failą ir perkelti jį į „zavit“, naudodami -file-upload parametrą, pvz.

  echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T - 
13
13 июня '17 в 22:41 2017-06-13 22:41 Atsakymą pateikė iloveretards birželio 13 d. 17 d. 10:41 pm 2017-06-13 22:41

Jis dirbo man:

 curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json 
12
16 окт. Atsakymas duotas Amit Vujic 16 okt. 2016-10-16 19:07 '16 at 7:07 pm 2016-10-16 19:07

„HTTPie“ yra rekomenduojama alternatyva garbanai, nes galite tiesiog

 $ http POST http://example.com/some/endpoint name=value name1=value1 

Pagal numatytuosius nustatymus jis kalba JSON ir tvarkys tiek reikiamos antraštės diegimą, tiek duomenų kodavimą kaip galiojantį JSON. Taip pat yra:

 Some-Header:value 

antraštes ir

 name==value 

užklausos eilutės parametrams. Jei turite didelį duomenų kiekį, galite jį perskaityti iš failo, jei jis užkoduotas JSON:

  field=@file.txt 
11
08 нояб. atsakymas pateikiamas lapkričio 8 d. 2017-11-08 15:45 '17 at 15:45 2017-11-08 15:45

Bandydamas naudojant žiniatinklio serverį naudoju šį formatą.

 use -F 'json data' 

Tarkime, kad šis formatas JSON diktuoja:

 { 'comment': { 'who':'some_one', 'desc' : 'get it' } } 

Visas pavyzdys

 curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}' 
7
10 янв. atsakymas, kurį pateikė user3180641 Jan 10 2014-01-10 09:49 '14 at 9:49 2014-01-10 09:49

„Json“ duomenims

curl -H "Content-Type: application/json" -X POST -d '{"params1":"value1","param2":"value2"}' http://localhost:8080/api

Jei norite paskelbti failą

curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload --insecure

Jei nenorite sugadinti https ir http:

ARBA Tiesiog

curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload

2
11 окт. Atsakymas pateikiamas Vishvajit Pathak 11 okt. 2017-10-11 09:52 '17 ne 9:52 am 2017-10-11 09:52

Galite perduoti norimo formato išplėtimą kaip URL pabaigą. pavyzdžiui, http: // localhost: 8080 / xx / xxx / xxxx .json

arba

http: // localhost: 8080 / xx / xxx / xxxx .xml

Pastaba: jums reikia pridėti „Jackson“ ir „JaxB Maven“ priklausomybes jūsų POM.

-3
16 июля '18 в 12:57 2018-07-16 12:57 atsakymą pateikė Saurabh Oza liepos 18 d. 18 val. 12:57 2018-07-16 12:57

Kiti klausimai apie žymes „ arba Užduoti klausimą