20 Soru: JSON verilerini Curl ile bir terminalden / komut satırından Test Spring REST'e nasıl POST yapabilirim?

tarafından oluşturulan soru Mon, Jun 24, 2019 12:00 AM

Ubuntu kullanıyorum ve üzerine cURL yükledim. Spring REST başvurumu cURL ile test etmek istiyorum. POST kodumu Java tarafına yazdım. Ancak, cURL ile test etmek istiyorum. Bir JSON verisi göndermeye çalışıyorum. Örnek veriler şöyledir:

 
{"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 formatta 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 formatı nedir?

Bu benim Java side PUT kodum (GET ve DELETE testlerini yaptım 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;
}
    
2465
  1. link bahar 3.2.0 gönderi istekleri için.
    2013-06-05 09: 41: 10Z
  2. Güzel bir yazı var RESTful Microservelerin Geçici Olarak Test Edilmesi İçin Curl Kullanma , bunu birden çok örnekle kapsar.
    2016-08-28 11: 03: 03Z
20 Yanıtlar                              20                         

İçerik türünüzü application /json olarak ayarlamanız gerekir. Ancak, -d , Bahar tarafında kabul edilmeyen Content-Type application/x-www-form-urlencoded'u gönderir .

curl man sayfasına bakıldığında, -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, --header’a, -d’a --data’a kısa)

-request POST bayrağı bir POST isteğinin ima ettiği gibi, -d kullanıyorsanız, -d'un isteğe bağlı olduğunu unutmayın.


Windows'da işler biraz farklıdır. Yorum dizisine bakın.

    
3854
2018-05-03 21: 43: 03Z
  1. -d seçeneğini komuttan kaldırdım ancak yine de aynı.
    2011-08-24 09: 42: 19Z
  2. Pencereler için, json etrafındaki tek tırnaklar işe yaramadı ve çift tırnaklardan kaçan biterim. curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
    2013-09-11 17: 34: 40Z
  3. Windows için benim için "{ """key1""": """value1""" }" biçimindeki tırnakları kullanarak tırnaktan kaçmam gerekiyordu. Ayrıca bu cevap: stackoverflow.com /sorular /18314796 /...
    2014-01-27 11: 10: 59Z
  4. @ chodorowicz bu korkunç! Ben sadece bu VB sözdizimini biliyorum!
    2014-01-27 12: 42: 55Z
  5. @ ostrokach üzgünüm zamanınızı boşa harcadı. Ben yazarken (yeniden denenmedi) sözdizimi OSX'te benim için iyi çalıştı. Sanırım bu sadece bir platform farkıydı. Olumsuz şeylerin yardım ettiği insanlardan olduğunu hayal ediyorum.
    2015-11-01 01: 23: 23Z

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

 
curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf
    
493
2011-08-24 10: 04: 24Z
  1. 404 hatası veriyor
    2011-08-24 10: 22: 59Z
  2. Büyük olasılıkla --data-binary yerine --data seçeneğini kullanmalısınız. Biri müşterinin verileri olduğu gibi göndermesini bekler, ancak --data CR ve LF'yi girişten çıkarır.
    2014-03-24 08: 22: 40Z
  3. cUrl'yi satır içi json ile kullanmak Dizeler bir kabus gibi görünüyor. Çifte alıntı karakterini gösterme ihtiyacı var. Böyle bir dosyayla gitmek daha hoş.
    2014-06-26 10: 26: 41Z
  4. Dosya adından önce @ karakter eklemek önemlidir, aksi takdirde çalışmaz. Bu boka kafamı çarparak 20 dakika geçirdim ...
    2015-08-18 11: 41: 09Z
  5. Bu cevabı derecelendiriyordum, ancak şu anki puanı 404…
    2018-05-30 16: 57: 49Z

Huzurunu faydalı bulabilirsiniz: https://github.com/micha/resty

Bu komut satırı REST isteklerini basitleştiren bir CURL yuvarlak sarıcıdır. Bunu API uç noktanıza yönlendirirsiniz ve size PUT ve POST komutlarını 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 yine de gereklidir. Bunu, site başına yöntem başına yapılandırma dosyaları eklemek için varsayılan olarak ayarlamak için bunu bir kez yapabilirsiniz: Varsayılan RESTY seçeneklerini ayarlama

    
90
2013-02-08 14: 34: 39Z

Windows için -d değeri için tek bir teklife sahip olmak benim için işe yaramadı, ancak çift teklife geçtikten sonra işe yaradı. Ayrıca küme parantezleri içinde çift tırnaktan kaçmam 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

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

 
curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path
    
77
2017-05-27 21: 51: 04Z
  1. FYI - json gövdesinin etrafında kapanan çift bir teklifi kaçırdığınıza benziyor
    2016-03-14 23: 10: 46Z
  2. Windows'ta benim için, "verilerin etrafında işe yaramaz, bunun yerine hiçbir alıntı yapılmaz
    2016-10-17 09: 44: 11Z
  3. PowerShell kullanıyorsanız, bu cevabına bakın.
    2018-02-28 19: 02: 52Z

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

Mutlu bir şekilde Bahar denetleyicisine 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, kimlik özelliği olan basit bir POJO 'dur.

    
76
2017-05-27 21: 47: 50Z

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

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

Ardından bu komutu çalıştırın:

 
curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server
    
47
2018-01-22 16: 05: 09Z

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

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

durumlarda,

-X http fiilini belirtir.

--data Göndermek istediğiniz verileri belirtir.

    
34
2015-07-01 14: 31: 40Z
  1. -X POST bu örnekte gereksizdir
    2018-01-22 16: 05: 45Z

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

 
-H "Content-Type: application/json; charset=UTF-8"
    
31
2011-11-15 15: 45: 09Z

CURL Windows kullanarak bunu deneyin:

 
curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee
    
26
2015-03-12 11: 37: 54Z

cURL komutunuzu bir araya getirmek için Postman 'ı sezgisel GUI’sı ile kullanabilirsiniz.

  1. Postacı 'yı yükleyin ve başlatın
  2. URL’nizi, Posta Adresinizi, İstek Üstbilgilerinizi vb. yazın. pp.
  3. Code'a tıklayın
  4. Aşağı açılır listeden cURL'u seçin
  5. kopyala ve amp; cURL komutunuzu yapıştırın

Not: Açılır listede otomatik istek oluşturma için birkaç seçenek vardır, bu yüzden gönderimin ilk sırada gerekli olduğunu düşündüm.

    
23
2017-09-25 12: 47: 20Z
  1. Postacının içinde bu özelliğin bulunduğunu anlamadı. Gösterdiğin için teşekkürler!
    2019-03-05 16: 31: 57Z

Çok sayıda JSON gönderme /yanıtını RESTful arabirimine karşı test ediyorsanız, Postacı eklentisi (web servis testlerini manuel olarak tanımlamanıza izin verir) ve Node.js tabanlı Newman komut satırı tamamlayıcısı (Postman testlerinin" koleksiyonlarına "karşı testleri otomatikleştirmenize izin verir.) Hem özgür hem de açık!

    
17
2017-02-14 21: 40: 23Z

HTTPie , curl için önerilen bir alternatiftir, çünkü bunu yapabilirsiniz.

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

Varsayılan olarak JSON konuşur ve hem sizin için gerekli başlığın ayarlanmasını hem de verileri geçerli JSON olarak kodlamasını sağlar. Ayrıca:

 
Some-Header:value

başlıklar için ve

 
name==value

sorgu dizesi parametreleri için. Çok fazla veri yığınınız varsa, JSON kodlu olması durumunda bir dosyadan da okuyabilirsiniz:

 
 field=@file.txt
    
15
2018-08-23 14: 13: 44Z

Ek olarak BASIC kimlik doğrulamasını kullanarak bu benim için iyi çalıştı:

 
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

Elbette, hiçbir zaman SSL ve işaretli bir sertifika olmadan BASIC kimlik doğrulamasını kullanmamalısınız.

Bugün yine, Cygwin'in Windows için cURL 7.49.1'i kullanarak koştum ... Ve --data veya --data-binary'u bir JSON argümanı ile kullanırken, cURL'un kafası karıştı ve JSON'daki {}'u bir URL şablonu olarak yorumladı. CURL globbing'i kapatmak için -g argümanı eklemek bunu düzeltti.

Ayrıca bakınız Kıvrılacak parantezli bir URL geçirme .

    
14
2017-05-27 21: 49: 25Z

JSON içeriğinizi bir dosyaya yerleştirebilir ve standart giriş yoluyla --file-upload seçeneğini kullanarak kıvrılarak geçirebilirsiniz:

 
 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
    
14
2019-03-23 ​​11: 41: 52Z

Bu benim için çalıştı:

 
curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
    
13
2016-10-16 16: 39: 51Z

Bir web sunucusuyla test etmek için aşağıdaki biçimi kullanıyorum.

 
use -F 'json data'

Bu JSON dict biçimini varsayalım:

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

Tam örnek

 
curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'
    
7
2017-05-27 21: 50: 02Z

Postacı CURL'ye dönüştürmek için kullanabilirsiniz  Resim tanımını buraya girin

 buraya resim açıklamasını girin

    
3
2019-05-30 06: 43: 36Z
  1. Sonsuza kadar @ LA için çok teşekkürler @
    2019-06-17 09: 37: 22Z

    Yük eklemek için -d seçeneğini kullanın

     
    curl -X POST \
    http://<host>:<port>/<path> \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
    "foo": "bar",
    "lorem": "ipsum"
    }'
    

    Ek olarak:

    POST yöntemini kullanmak için -X POST kullanın

    kabul tipi başlık eklemek için -H 'Kabul et: application /json' kullanın

    içerik tipi başlığı eklemek için -H 'Content-Type: application /json' kullanın

        
    0
    2019-04-13 20: 06: 36Z

    Lütfen bu aracını kontrol edin. Curl parçacıklarını kolayca oluşturmanıza yardımcı olur.

     
    curl -XGET -H "Accept: application/json" -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"
    
        
    - 1
    2019-05-27 12: 35: 04Z

    İstediğiniz biçimin uzantısını, URL'nin sonu olarak iletebilirsiniz. http: //localhost: 8080 /xx /xxx /xxxx gibi /strong>

    veya

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

    Not: j eklemeniz gerekirackson ve jaxb maven pom'daki bağımlılıklar.

        
    - 6
    2018-07-16 09: 57: 33Z
    1. Bu, yalnızca sunucu tarafı bu uzantılara sahip URL’leri kabul ettiğinde işe yarar.
      2018-08-23 14: 01: 31Z
    2. Doğru, bu sunucu tarafında çalışacak.
      2018-10-12 07: 59: 12Z
kaynak yerleştirildi İşte