Bagaimana cara POST data JSON menggunakan Curl dari terminal / command line untuk menguji Spring REST?

Saya menggunakan Ubuntu dan menginstal Curl di atasnya. Saya ingin menguji aplikasi Spring REST saya menggunakan Curl. Saya menulis kode POST saya di sisi Java. Namun, saya ingin memeriksanya menggunakan Curl. Saya mencoba untuk mempublikasikan data JSON. Contoh data adalah sebagai berikut:

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

Saya menggunakan perintah ini:

 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 

Ini mengembalikan kesalahan ini:

 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 

Deskripsi kesalahan:

Server menolak permintaan ini karena objek permintaan dalam format yang tidak didukung oleh sumber daya yang diminta untuk metode yang diminta ().

Log Tomcat: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

Adakah gagasan tentang format yang benar untuk perintah Curl?

EDIT:

Ini adalah kode PUT saya di sisi Java (saya menguji GET dan DELETE, dan mereka bekerja)

 @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 авг. set kamaci 24 agustus . 2011-08-24 11:51 '11 pada 11:51 2011-08-24 11:51
@ 18 jawaban

Anda perlu mengatur tipe konten ke application / json. Tapi -d mengirimkan application/x-www-form-urlencoded Content-Type application/x-www-form-urlencoded , yang tidak diterima di sisi Spring.

Melihat halaman -H curl , saya pikir Anda bisa menggunakan -H :

 -H "Content-Type: application/json" 

Contoh lengkap:

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

( -H disingkat --Header , -d untuk --data )

Perhatikan bahwa -request POST adalah opsional jika Anda menggunakan -d , karena flag -d menyiratkan permintaan POST.


Di Windows, segalanya sedikit berbeda. Lihat utas komentar.

3546
24 авг. balasan yang diberikan oleh Sean Patrick Floyd 24 Agustus 2011-08-24 12:12 '11 pada 12:12 2011-08-24 12:12

Coba masukkan data Anda ke file, katakanlah body.json , dan kemudian gunakan

 curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf 
461
24 авг. Jawabannya diberikan oleh Typisch 24 Agustus. 2011-08-24 13:04 '11 pada 13:04 2011-08-24 13:04

Anda dapat menemukan manfaat untuk rekreasi: https://github.com/micha/resty

Ini adalah pembungkus di sekitar CURL yang menyederhanakan permintaan baris perintah REST. Anda arahkan ke titik akhir API, dan itu memberikan perintah PUT dan POST. (Contoh diberikan di halaman beranda)

 $ 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 

Selain itu, sering kali perlu menambahkan header Jenis Konten. Namun, Anda dapat melakukan ini untuk menetapkan nilai default untuk menambahkan file konfigurasi untuk setiap metode untuk setiap situs: Pengaturan default adalah opsi RESTY

90
12 янв. Jawabannya diberikan mo-seph 12 Januari 2012-01-12 22:10 '12 jam 10:10 malam 2012-01-12 22:10

Dia bekerja untuk saya menggunakan:

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

Itu dengan senang hati dipetakan ke controller Spring:

 @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 adalah POJO sederhana dengan properti id.

71
19 апр. jawabannya diberikan oleh Luis pada 19 April. 2012-04-19 19:00 '12 pada jam 7 malam 2012-04-19 19:00

Untuk Windows, memiliki satu penawaran untuk nilai -d tidak bekerja untuk saya, tetapi berhasil setelah perubahan menjadi penawaran ganda. Saya juga perlu menghindari tanda kutip ganda di dalam kurung kurawal.

Artinya, berikut ini tidak berfungsi:

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

Tetapi yang berikut ini berhasil:

 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 jawabannya diberikan kepada venkatnz pada 01 Juli '14 pada 1:12 2014-07-01 01:12

Misalnya, buat file JSON, params.json, dan tambahkan konten berikut ke dalamnya:

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

Kemudian Anda menjalankan perintah ini:

 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 янв. Jawaban diberikan oleh Eduardo Cerqueira pada 6 Januari 2016-01-06 02:10 '16 pada pukul 2:10 AM 2016-01-06 02:10

Itu bekerja dengan baik untuk saya.

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

Dimana

-X berarti kata kerja http.

--data Menunjukkan data yang ingin Anda kirim.

33
01 июля '15 в 17:31 2015-07-01 17:31 jawabannya diberikan felipealves.gnu 01 Juli '15 pukul 17:31 2015-07-01 17:31

Saya hanya mengalami masalah yang sama. Saya bisa menyelesaikan ini dengan menunjuk

 -H "Content-Type: application/json; charset=UTF-8" 
29
15 нояб. Jawaban diberikan oleh Steffen Roller 15 Nov 2011-11-15 18:45 '11 pada 18:45 2011-11-15 18:45

Menggunakan Windows CURL, coba yang berikut ini:

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

Anda dapat menggunakan tukang pos dengan GUI intuitifnya untuk membangun perintah cURL Anda.

  1. Instal dan jalankan tukang pos
  2. Masukkan URL Anda, teks pesan, header permintaan, dll.
  3. Klik pada Code
  4. Pilih cURL dari daftar dropdown.
  5. salin dan tempel perintah cURL Anda

Catatan Ada beberapa opsi dalam daftar turun bawah untuk pembuatan kueri otomatis, jadi saya memutuskan bahwa posting saya diperlukan terlebih dahulu.

18
25 сент. balasan diberikan oleh kiltek pada 25 September . 2017-09-25 15:47 '17 pada 15:47 2017-09-25 15:47

Jika Anda menguji banyak pesan JSON / tanggapan terhadap antarmuka RESTful, Anda dapat memeriksa plug-in Postman untuk Chrome (yang memungkinkan Anda untuk menentukan tes layanan web) dan pendamping Newman berbasis Node.js (yang memungkinkan Anda untuk mengotomatisasi tes terhadap koleksi tes. Tukang pos.) Keduanya gratis dan terbuka!

16
23 мая '14 в 16:34 2014-05-23 16:34 jawabannya diberikan oleh ftexperts 23 Mei '14 pukul 16:34 2014-05-23 16:34

Ini bekerja untuk saya, tambahan menggunakan otentikasi BASIC:

 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 

Tentu saja, Anda tidak boleh menggunakan otentikasi BASIC tanpa SSL dan sertifikat yang diverifikasi.

Saya mengalami ini hari ini menggunakan Cygwin cURL 7.49.1 untuk Windows ... Dan ketika menggunakan --data atau --data-binary dengan argumen JSON, cURL menjadi bingung dan menafsirkan {} di JSON sebagai pola URL. Menambahkan argumen -g untuk menonaktifkan cURL globbing tetap.

Lihat juga pengiriman URL dengan kurung pengeriting .

13
06 июня '13 в 2:24 2013-06-06 02:24 jawabannya diberikan davenpcj 06 Juni '13 pada 2:24 2013-06-06 02:24

Agak terlambat untuk pesta, tetapi saya tidak melihat bahwa itu dipublikasikan, jadi di sini Anda dapat menambahkan json Anda ke file dan mentransfernya ke zavit menggunakan parameter -file-unggah melalui input standar, misalnya

  echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T - 
13
13 июня '17 в 22:41 2017-06-13 22:41 Jawabannya diberikan oleh iloveretards 13 Juni '17 jam 10:41 malam 2017-06-13 22:41

Ini bekerja untuk saya:

 curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json 
12
16 окт. Jawabannya diberikan Amit Vujic 16 Oktober. 2016-10-16 19:07 '16 pada 19:07 2016-10-16 19:07

HTTPie adalah alternatif yang disarankan untuk curl karena Anda bisa saja

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

Secara default, ini berbicara JSON dan akan menangani instalasi header yang Anda butuhkan dan pengkodean data sebagai JSON yang valid. Ada juga:

 Some-Header:value 

untuk berita utama dan

 name==value 

untuk parameter string kueri. Jika Anda memiliki sepotong besar data, Anda juga dapat membacanya dari file jika dikodekan dalam JSON:

  field=@file.txt 
11
08 нояб. jawabannya diberikan tosh 08 Nov. 2017-11-08 15:45 '17 pada 15:45 2017-11-08 15:45

Saya menggunakan format berikut untuk pengujian menggunakan server web.

 use -F 'json data' 

Misalkan format ini JSON dict:

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

Contoh lengkap

 curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}' 
7
10 янв. jawaban yang diberikan oleh user3180641 10 Jan 2014-01-10 09:49 '14 pada 9:49 2014-01-10 09:49

Untuk data json

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

Jika Anda ingin menerbitkan file

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

Jika Anda tidak ingin merusak https dan http:

Atau adil

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

2
11 окт. Jawabannya diberikan Vishvajit Pathak 11 Oktober. 2017-10-11 09:52 '17 pukul 9:52 pagi 2017-10-11 09:52

Anda dapat meneruskan ekstensi format yang diinginkan sebagai akhir URL. misalnya http: // localhost: 8080 / xx / xxx / xxxx .json

atau

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

Catatan: Anda perlu menambahkan dependensi Jackson dan JaxB Maven di POM Anda.

-3
16 июля '18 в 12:57 2018-07-16 12:57 jawabannya diberikan oleh Saurabh Oza pada 16 Juli '18 pada 12:57 2018-07-16 12:57

Pertanyaan lain tentang tag atau Ajukan pertanyaan