Bahar REST testi üçün terminal / komut satırından Curl istifadə edərək POST JSON məlumatları necə alınır?

Ubuntu'dan istifadə edirəm və üzərinə Curl qurdum. Curl istifadə edərək Spring REST tətbiqini sınamaq istəyirəm. Mənim POST kodunu Java tərəfinə yazdım. Lakin, Curl istifadə edərək onu yoxlamaq istəyirəm. JSON məlumatlarını dərc etməyə çalışıram. Məlumatların nümunəsi aşağıdakılardır:

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

Mən bu əmri istifadə edirəm:

 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 

Bu səhv qaytarır:

 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 

Səhv təsviri:

Xahiş obyekti, istənilən üsul () üçün istənilən resurs tərəfindən dəstəklənməyən formatda olduğu üçün server bu tələbi rədd etdi.

Tomcat günlüğü: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

Curl komanda üçün düzgün formatda hər hansı bir fikir?

EDIT:

Bu Java mənim PUT kodumdur (Mən GET və DELETE sınamışam və işləyirəm)

 @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 авг. dəsti kamacı 24 aug. 2011-08-24 11:51 '11 at 11:51 2011-08-24 11:51
@ 18 cavab

Məzmunu tətbiq / json olaraq təyin etməlisiniz. Lakin, -d application/x-www-form-urlencoded Content-Type application/x-www-form-urlencoded , bu, Bahar tərəfində qəbul edilmir.

-H curl səhifəsinə baxaraq, mən istifadə edə bilərsiniz hesab edirəm -H :

 -H "Content-Type: application/json" 

Tam nümunə:

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

( -H üçün --Header , -d --data )

Qeyd edək ki, -d bayrağının bir POST tələbi olduğundan -d , istifadə etdiyiniz təqdirdə -request POST isteğe bağlıdır.


Windows'da şeylər bir az fərqlidir. Şərhlərin mövzularına baxın.

3546
24 авг. Sean Patrick Floyd tərəfindən verilmiş cavab 24 Avqust. 2011-08-24 12:12 '11 'da 12:12' də 2011-08-24 12:12

body.json bir faylda qoyaraq, body.json cəhd edin və sonra istifadə edin

border=0
 curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf 
461
24 авг. Cavab Typisch 24 aug tərəfindən verilir . 2011-08-24 13:04 '11 'da 13:04' də, 2011-08-24 13:04

İstirahət üçün faydalı tapa bilərsiniz: https://github.com/micha/resty

Bu, REST komanda xəttini istəklərini asanlaşdıran CURL ətrafında bir sarmalandır. Bunu API son nöqtəsinə işarə edir və PUT və POST komandalarına verir. (Nümunələr ana səhifədə verilir)

 $ 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 

Bundan əlavə, məzmun Tür başlıqlarını əlavə etmək çox vaxt lazımdır. Bununla belə, hər bir site üçün hər bir metod üçün konfiqurasiya faylları əlavə etmək üçün u mənim dəyərini təyin etmək üçün bunu edə bilərsiniz: Default setting RESTY variantlarıdır

90
12 янв. Cavab yanvarın 12 -də verilir 2012-01-12 22:10 '12 saat 10:10 'da 2012-01-12 22:10

O mənim üçün istifadə etdi:

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

Xoşbəxt bir Bahar nəzarətçisinə eşlenmiştir:

 @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 bir id əmlakı ilə sadə POJO edir.

71
19 апр. Cavab Luis tərəfindən 19 apr. 2012-04-19 19:00 '12 saat 19.00 'da

Windows üçün, -d dəyərində bir qiymətə sahib olmaq mənim üçün işləməyib, lakin dəyişiklikdən sonra cüt qiymətə işləmişdir. Mən də kıvırcık ayaqqabılar içərisində ikiqat qiymətdən qaçmağa məcbur oldum

Yəni aşağıdakılar işləmir:

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

Lakin aşağıdakılar işləyirdi:

 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 cavab 1 iyul 2014-cü il tarixdə 1:12 2014-12-01 01:12 tarixində verilir

Məsələn, params.json bir JSON fayl yaradın və aşağıdakı məzmunu əlavə edin:

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

Sonra bu əmri çalıştırırsınız:

 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 янв. Cavab Eduardo Cerqueira tərəfindən yanvarın 06-da verildi 2016-01-06 02:10 '16 saat 02:10 'da 2016-01-06 02:10

Bu mənim üçün yaxşı işləyirdi.

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

Harada?

-X , http verb deməkdir.

--data istədiyiniz məlumatları göstərir.

33
01 июля '15 в 17:31 2015-07-01 17:31 Cavab verilir felipealves.gnu İyul 01 '15 17:31 2015-07-01 17:31

Mən də eyni problemə qaçdım. Bunu işarə edərək həll edə bilərəm

 -H "Content-Type: application/json; charset=UTF-8" 
29
15 нояб. Cavab Steffen Roller tərəfindən Noyabr 15 verilir 2011-11-15 18:45 '11 saat 18:45 'də 2011-11-15 18:45

Windows CURL istifadə edərək, aşağıdakıları cəhd edin:

 curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee 
24
21 дек. Cavab Márcio Brener tərəfindən verilir 21 dekabr. 2014-12-21 02:45 '14 'də 2:45' də 2014-12-21 02:45

cURL yaratmaq üçün intuitiv GUI ilə Postman istifadə edə bilərsiniz.

  1. Postmanı quraşdırın və çalıştırın
  2. URL, mesaj metninizi, başlıq tələb et və s. Daxil edin.
  3. Code
  4. Açar siyahısından cURL seçin.
  5. cURL əmrini kopyalayıb yapışdırın

Qeyd Avtomatik sorgu yaratma üçün açılır siyahıdan bir neçə variant var, buna görə mənim post əvvəlcə lazım idi.

18
25 сент. Cavab 25 sentyabrda kiltek tərəfindən verilir . 2017-09-25 15:47 '17 saat 15:47 2017-09-25 15:47

RESTful interfeysinə bir çox JSON mesajı / cavabı test etsəniz, Chrome üçün Postman plug-inini (veb xidmət testlərini əl ilə təyin etməyə imkan verən) və onun Node.js əsaslı Newman yoldaşını (test koleksiyasına qarşı testləri avtomatlaşdırmağa imkan verən) Postman.) Həm pulsuz, həm də açıq!

16
23 мая '14 в 16:34 2014-05-23 16:34 cavab mayın 23-də, saat 14 : 34 - də, 2014-05-23 16:34 tarixində verilir

Bu mənim üçün çalışdı, əlavə BASIC identifikasiyası istifadə:

 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 

Əlbəttə, SSL və təsdiq edilmiş bir sertifikat olmadan BASIC identifikasiyası heç vaxt istifadə etməməlisiniz.

Windows üçün Cygwin cURL 7.49.1 istifadə edərək, bu günə qədər qaçdım ... Və bir JSON arqumenti ilə --data və ya --data-binary istifadə edərkən, cURL --data{} JSON-da URL nümunəsi kimi şərh edildi. CURL globbing funksiyasını dayandırmaq üçün argumenti- -g əlavə edin.

Kıvırmızı mötərizələrləURL təqdiminə baxın.

13
06 июня '13 в 2:24 2013-06-06 02:24 Cavab cavenpcj cavab 06 iyun '2 saat 2:24 2013-06-06 02:24

Bir tərəf üçün bir az gec, amma yayınlandığını görmürəm ki, burada json faylını əlavə edə bilərsiniz və standart giriş vasitəsilə fayl yükləməni parametrdən istifadə edərək zavitə ötürə bilərsiniz, məsələn,

  echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T - 
13
13 июня '17 в 22:41 2017-06-13 22:41 Cavab 13 avqustun 17-də saat 10: 41-də 2017-06-13 22:41 tarixində verilir

Mənim üçün çalışdı:

 curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json 
12
16 окт. Cavab Amit Vujic 16 oct verilir. 2016-10-16 19:07 '16 saat 07:07 'da 2016-10-16 19:07

HTTPie , yalnız edə bilərsiniz, çünki curl üçün təklif olunan alternativdir

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

Mənim cari olaraq, JSON deyir və lazım olan üstbilginin quraşdırılması və məlumatların kodlanması düzgün JSON kimi idarə edəcək. Həmçinin:

 Some-Header:value 

başlıqları və

 name==value 

query string parametrləri üçün. Böyük bir məlumatınız varsa, JSON'da kodlaşdırıldığı təqdirdə, onu fayldan da oxuya bilərsiniz:

  field=@file.txt 
11
08 нояб. cavab 08 noyabr tarixində verilir. 2017-11-08 15:45 '17 saat 15:45 'də 2017-11-08 15:45

Veb serverdən istifadə etmək üçün aşağıdakı formatdan istifadə edirəm.

 use -F 'json data' 

Bu format JSON dict:

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

Tam nümunə

 curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}' 
7
10 янв. user3180641 tərəfindən verilmiş cavab 10 yanvar 2014-01-10 09:49 '14 at 9:49 2014-01-10 09:49

Json məlumatları üçün

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

Bir fayl dərc etmək istəyirsinizsə

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

Https və http:

Yoxsa yalnız

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

2
11 окт. Cavab Vishvajit Pathak 11 okt verilir. 2017-10-11 09:52 '17 saat 09:52 'da 2017-10-11 09:52

İstədiyiniz formatın URL'sinin sonu olaraq qəbul edə bilərsiniz. məsələn, http: // localhost: 8080 / xx / xxx / xxxx .json

və ya

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

Qeyd: POM-a Jackson və JaxB Maven bağımlılıklarını əlavə etmək lazımdır.

-3
16 июля '18 в 12:57 2018-07-16 12:57 Cavab Saurabh Oza tərəfindən 16 iyul '18 'də saat 12:57' də 2018-07-16 12:57 'də verilir

Tags ilə bağlı digər suallar və ya bir sual