Soru Spring REST'i Test Etmek İçin Terminal / Komut Satırı'ndan Curl ile JSON verilerini nasıl POST


Ubuntu kullanıyorum ve üzerine Curl kurdum. Spring REST uygulamamı Curl ile test etmek istiyorum. POST kodumu Java tarafında yazdım. Bununla birlikte, Curl ile test etmek istiyorum. Bir JSON veri göndermeye çalışıyorum. Örnek veriler şöyle:

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

Bu komutu kullanıyorum:

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 hatayı döndürü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

Hata açıklaması şudur:

İstek isteği, istenen yöntem () için istenen kaynak tarafından desteklenmeyen bir biçimde olduğu için sunucu bu isteği reddetti.

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

Curl komutunun doğru biçimi hakkında herhangi bir fikir?

DÜZENLE:

Bu benim Java tarafı PUT kodum (GET ve DELETE test ettim ve çalışıyorlar)

@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;
} 

2049
2017-08-24 08:51


Menşei


kontrol et bağlantı bahar 3.2.0 sonrası istekleri için. - AmirHd
Güzel bir mesaj var RESTful Microservices Of Ad Hoc Testi İçin Curl Kullanımı bunu birden çok örnekle kapsayan. - upitau


Cevaplar:


İçerik türünüzü uygulama / json olarak ayarlamanız gerekir. Fakat -d İçerik Türü'nü gönderir application/x-www-form-urlencodedBahar tarafında kabul edilmez.

Bakıyor curl man sayfasıSanırım kullanabilirsin -H:

-H "Content-Type: application/json"

Tam örnek:

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

(-H İçin Kısa --header, -d için --data)

Bunu not et -request POST olduğu isteğe bağlı Eğer kullanırsan -dolarak -d bayrak bir POST isteğini belirtir.


Windows'da işler biraz farklı. Yorum konusuna bakın.


3234
2017-08-24 09:12



-D seçeneğini komuttan kaldırdım ama yine de aynı. - kamaci
hala karışık olabilecek herkes için tam sözdizimi şöyledir: curl -X POST -H "Content-Type: application/json" -d '{"key":"val"}' URL - Adam Tuttle
curl -X POST -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login  benim için çalıştı. - shweta
Pencereler için, json etrafında tek tırnaklar işe yaramadı ve çifte tırnaklardan kaçtım. curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method - hIpPy
Windows altında benim için tırnakları bu formatta kullanarak kaçmam gerekiyor "{ """key1""": """value1""" }". Ayrıca bu cevap: stackoverflow.com/questions/18314796/... - chodorowicz


Verilerinizi bir dosyaya koymaya çalışın body.json ve sonra kullan

curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf

426
2017-08-24 10:04



404 hatası veriyor - kamaci
Muhtemelen --data-binary yerine seçeneği --data. Biri, müşterinin verileri olduğu gibi göndereceğini umardı, ama --data CR ve LF'yi girişten keser. - h2stein
Inline json ile cUrl kullanma Strings bir kabus gibi görünüyor. Çifte alıntı karakterini belirleme ihtiyacı var. Böyle bir dosyayla gitmek daha güzel. - Xtreme Biker
Eklemek önemlidir @ Dosya isminden önce karakter, aksi takdirde işe yaramaz. Sadece 20 dakikamı bu boktan kafamı vurarak geçirdim ... - Radu Murzea
Bu şekilde, JSON'u ayrıştırmada bir hata olup olmadığını görmek için dosyada bir JSON teli de çalıştırabilirsiniz. - datashaman


Yararlı bulabilirsiniz: https://github.com/micha/resty

Komut satırı REST isteklerini basitleştiren bir CURL sarıcısıdır. API son noktaya yönlendirirsiniz ve size PUT ve POST komutları verir. (Ana sayfadan uyarlanmış örnekler)

$ 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

Ayrıca, İçerik Türü başlıklarını eklemek genellikle gerekli. Bununla birlikte, her bir site için yöntem başına varsayılan yapılandırma dosyası varsayılanı ayarlamak için bunu bir kez yapabilirsiniz: Varsayılan RESTY seçeneklerini ayarlama


86
2018-01-12 19:10





Benim için çalıştı:

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

Bahar denetleyicisine mutlu bir şekilde eşlendi:

@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 basit POJO bir kimlik özelliği ile.


69
2018-04-19 16:00





Windows için, -d Değer benim için işe yaramadı, ancak çifte fiyat teklifine geçtikten sonra işe yaradı. Ayrıca küme parantez içinde çift tırnak kaçmak gerekiyordu.

Yani, aşağıdaki işe yaramadı:

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

Ama aşağıdakiler işe yaradı:

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

58
2018-06-30 22:12



FYI - json vücudunun etrafında bir kapanış çifte teklifi kaçırıyor gibisin - acanby
Windows'ta benim için "veriler etrafta çalışmıyor, bunun yerine tırnak işaretleri çalışmıyor - rodedo
PowerShell'i kullanıyorsanız, bkz. bu Cevap. - rsenna


Örnek olarak, bir JSON dosyası oluşturun, params.json ve bu içeriği buna ekleyin:

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

Sonra bu komutu çalıştırırsın:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server

37
2018-01-05 23:10





Bu benim için iyi çalıştı.

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

Nerede,

-X Http fiilini belirtir.

--data Göndermek istediğiniz verileri ifade eder.


32
2017-07-01 14:31



-X POST bu örnekte gereksizdir - Engineer Dollery


Ben sadece aynı problemle karşılaşıyorum. Bunu belirterek çözebilirim

-H "Content-Type: application/json; charset=UTF-8"

26
2017-11-15 15:45





CURL Windows'u kullanarak şunu deneyin:

curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee

23
2017-12-20 23:45





RESTful arayüzüne karşı çok fazla JSON gönderimi / yanıtı test ediyorsanız, kontrol etmek isteyebilirsiniz. postacı Chrome için eklenti (web hizmeti testlerini manuel olarak tanımlamanıza olanak tanır) ve Node.js tabanlı Yeni adam komut satırı arkadaşı (Postman testlerinin "koleksiyonlarına" karşı testleri otomatikleştirmenizi sağlar.) Hem özgür hem de açık!


15
2018-05-23 13:34





Kullanabilirsiniz postacı senin sezgisel GUI ile birleştirmek senin cURL Komut.

  1. Yükleme ve Başlatma postacı
  2. URL'nizi, Gönderinizi, İstek başlıklarını vb. Yazın. Pp.
  3. Tıklamak Code
  4. seçmek cURL açılır listeden
  5. kopyala ve yapıştır cURL komuta

Not: Açılır listede otomatik talep oluşturma için birkaç seçenek vardır, bu yüzden ilk etapta postamın gerekli olduğunu düşündüm.


13
2017-09-25 12:47