Saya menggunakan Ubuntu dan menginstal CURL di atasnya. Saya ingin menguji aplikasi Spring REST saya dengan CURL. Saya menulis kode POST saya di sisi Java. Namun, saya ingin mengujinya dengan CURL. Saya mencoba memposting data JSON. Contoh data seperti ini:
{"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 kesalahannya adalah ini:
Server menolak permintaan ini karena entitas 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
Apa format yang benar dari perintah cURL?
Ini adalah PUT
kode sisi Java saya (saya telah 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;
}
json
rest
spring-mvc
curl
http-headers
kamaci
sumber
sumber
Jawaban:
Anda perlu mengatur tipe konten Anda ke aplikasi / json. Tetapi
-d
mengirimkan Tipe-Kontenapplication/x-www-form-urlencoded
, yang tidak diterima di sisi Spring.Melihat halaman manual ikal , saya pikir Anda dapat menggunakan
-H
:Contoh lengkap:
(
-H
kependekan dari--header
,-d
untuk--data
)Perhatikan bahwa
-request POST
itu opsional jika Anda menggunakan-d
, karena-d
bendera menyiratkan permintaan POST.Di Windows, segalanya sedikit berbeda. Lihat utas komentar.
sumber
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Juga jawaban ini: stackoverflow.com/questions/18314796/…Cobalah untuk memasukkan data Anda dalam file, katakan
body.json
dan kemudian gunakansumber
--data-binary
opsi sebagai gantinya--data
. Orang akan berharap bahwa klien mengirim data apa adanya, tetapi--data
menghapus CR dan LF dari input.@
karakter sebelum nama file, jika tidak maka tidak akan berfungsi. Saya hanya menghabiskan 20 menit membenturkan kepalaku ke omong kosong ini ...Anda mungkin menemukan resty berguna: https://github.com/micha/resty
Ini adalah pembungkus bulat CURL yang menyederhanakan permintaan REST baris perintah. Anda arahkan ke titik akhir API Anda, dan itu memberi Anda perintah PUT dan POST. (Contoh diadaptasi dari beranda)
Selain itu, sering kali masih perlu menambahkan header Jenis Konten. Anda dapat melakukan ini satu kali, untuk menetapkan default, menambahkan file config per-metode per-situs: Mengatur opsi RESTY default
sumber
Untuk Windows, memiliki satu kutipan untuk
-d
nilai tidak bekerja untuk saya, tetapi itu berhasil setelah berubah menjadi dua kali lipat. Saya juga perlu menghindari tanda kutip ganda di dalam kurung keriting.Artinya, berikut ini tidak berfungsi:
Tetapi yang berikut ini berhasil:
sumber
Ini berhasil bagi saya menggunakan:
Itu dengan senang hati dipetakan ke controller Spring:
IdOnly
adalah POJO sederhana dengan properti id.sumber
Sebagai contoh, buat file JSON, params.json, dan tambahkan konten ini ke dalamnya:
Kemudian Anda menjalankan perintah ini:
sumber
Saya hanya mengalami masalah yang sama. Saya bisa menyelesaikannya dengan menentukan
sumber
Ini bekerja dengan baik untuk saya.
Dimana,
-X
Berarti kata kerja http.--data
Berarti data yang ingin Anda kirim.sumber
-X POST
berlebihan dalam contoh iniAnda dapat menggunakan tukang pos dengan GUI intuitifnya untuk merakit
cURL
perintah Anda .Code
cURL
dari daftar drop-downcURL
perintah AndaCatatan: Ada beberapa opsi untuk pembuatan permintaan otomatis dalam daftar drop-down, itulah mengapa saya pikir posting saya perlu di tempat pertama.
sumber
Menggunakan CURL Windows, coba ini:
sumber
Anda dapat menggunakan tukang pos untuk mengonversi ke CURL
sumber
HTTPie adalah alternatif yang disarankan
curl
karena Anda bisa melakukannya dengan adilIni berbicara JSON secara default dan akan menangani pengaturan header yang diperlukan untuk Anda serta menyandikan data sebagai JSON yang valid. Ada juga:
untuk header, dan
untuk parameter string kueri. Jika Anda memiliki banyak data, Anda juga dapat membacanya dari file yang dikodekan JSON:
sumber
Jika Anda menguji banyak pengiriman / respons JSON terhadap antarmuka RESTful, Anda mungkin ingin memeriksa plug-in Postman untuk Chrome (yang memungkinkan Anda untuk menentukan tes layanan web secara manual) dan perintah Newman berbasis Node.js-nya pendamping-line (yang memungkinkan Anda untuk mengotomatisasi tes terhadap "koleksi" tes Postman.) Baik gratis dan terbuka!
sumber
Ini bekerja dengan baik untuk saya, tambahan menggunakan otentikasi BASIC:
Tentu saja, Anda tidak boleh menggunakan otentikasi BASIC tanpa SSL dan sertifikat yang diperiksa.
Saya mengalami hal ini lagi hari ini, menggunakan cURL 7.49.1 untuk Windows Cygwin ... Dan ketika menggunakan
--data
atau--data-binary
dengan argumen JSON, cURL menjadi bingung dan akan menafsirkannya{}
di JSON sebagai templat URL. Menambahkan-g
argumen untuk mematikan globbing cURL memperbaikinya.Lihat juga Melewati URL dengan tanda kurung untuk digulung .
sumber
Anda juga bisa meletakkan konten JSON Anda di file dan meneruskannya ke curl menggunakan
--file-upload
opsi melalui input standar, seperti ini:sumber
Ini bekerja untuk saya:
sumber
Saya menggunakan format di bawah ini untuk menguji dengan server web.
Mari kita asumsikan format dikt JSON ini:
Contoh lengkap
sumber
Gunakan opsi -d untuk menambahkan muatan
Sebagai tambahan:
gunakan -X POST untuk menggunakan metode POST
gunakan -H 'Terima: aplikasi / json' untuk menambahkan header jenis terima
gunakan -H 'Content-Type: application / json' untuk menambahkan header tipe konten
sumber
Silakan periksa alat ini . Ini membantu Anda untuk membuat potongan ikal dengan mudah.
sumber
Ini bekerja untuk saya di Windows10
sumber
Berikut ini cara lain untuk melakukannya, jika Anda memiliki data dinamis untuk dimasukkan.
sumber
Saya tahu, banyak yang telah dijawab untuk pertanyaan ini tetapi ingin berbagi di mana saya memiliki masalah:
Lihat, aku melakukan semuanya dengan benar, Hanya satu hal - "@" Saya melewatkan sebelum jalur file JSON.
Saya menemukan satu dokumen masuk yang relevan di internet - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Semoga itu bisa membantu beberapa orang. Terima kasih
sumber
Jika Anda mengkonfigurasi SWAGGER ke aplikasi booting musim semi Anda, dan menjalankan API apa pun dari aplikasi Anda di sana, Anda juga dapat melihat Permintaan CURL itu.
Saya pikir ini adalah cara mudah untuk menghasilkan permintaan melalui CURL.
sumber
Anda dapat meneruskan ekstensi format yang Anda inginkan sebagai akhir dari url. seperti 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.
sumber