Cum pot POSTA date JSON cu Curl de la un terminal/commandline pentru a Testa Primăvară RESTUL?

Eu folosesc Ubuntu si instalat cURL pe ea. Vreau să-mi testez Primăvară RESTUL aplicație cu cURL. Mi-am scris codul POȘTAL în partea de Java. Cu toate acestea, vreau să-l testeze cu cURL. Am încercat să postez un date JSON. Exemplu de date este ca aceasta:

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

Eu folosesc aceasta comanda:

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

Returnează eroarea asta:

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

Descriere de eroare este asta:

serverul a refuzat această solicitare, deoarece cererea entitatea este într-un format care nu este suportat de resurse solicitate pentru solicitată metoda ().

Tomcat log: "POST /ui/webapp/conf/clar HTTP/1.1" 415 1051

Ce este formatul corect de comandă cURL?

Acest lucru este meu de Java partea "PUNE" cod (am testat OBȚINE și ȘTERGEȚI-și au locul de muncă):

@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;
}
Comentarii la întrebare (2)
Soluția

Aveți nevoie pentru a seta content-type application/json. Dar d trimite Content-Type application/x-www-form-urlencoded, care nu este acceptat în Primăvară's parte.

Se uită la curl om page, cred că puteți utiliza -H:

-H "Content-Type: application/json"

Exemplu complet:

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

(-H este prescurtarea de la --antet, -d "pentru" --date)

Notă:- cerere POSTe *opțional* dacă utilizați-d, ca-d` steagul implică o cerere POST.


Pe Windows, lucrurile sunt puțin diferite. A se vedea comentariul de fir.

Comentarii (26)

Încercați pentru a pune datele într-un fișier, cum corpul lui.json` și de a folosi apoi

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

S-ar putea găsi resty utile: https://github.com/micha/resty

L's un înveliș rotund CURL care simplifică linie de comandă RESTUL de cereri. Indicați-l la API final, și dă-ai PUS și POST-comenzi. (Exemple adaptate la pagina de start)

$ 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

De asemenea, l's de multe ori încă necesar să adăugați un Tip de Conținut cap. Puteți face acest lucru o dată, totuși, să setați o valoare implicită, de a adăuga fișiere de configurare per-metoda de pe site-ul: Setare implicită RESTY opțiuni

Comentarii (0)

Pentru Windows, având un singur citat pentru -d valoare nu au de lucru pentru mine, dar a făcut de lucru după schimbarea la dublu citat. De asemenea, am nevoie pentru a scăpa ghilimele în interiorul acolade.

Asta este, următoarele nu au de lucru:

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

Dar următoarele lucrat:

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

Ea a lucrat pentru mine, folosind:

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

Era fericit mapate la Primavara controller:

@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 este un simplu POJO cu un id de proprietate.

Comentarii (0)

Ca un exemplu, creați un fișier JSON, params.json, și se adaugă acest conținut să-l:

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

Apoi executați această comandă:

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

Aceasta a lucrat bine pentru mine.

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

În cazul în care,

-X Înseamnă http verb.

`--de date Înseamnă datele care doriți să trimiteți.

Comentarii (1)

Am aceeasi problema. Am putea rezolva prin specificarea

-H "Content-Type: application/json; charset=UTF-8"
Comentarii (0)

Folosind CURL Windows, încercați acest lucru:

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

Puteți utiliza Poștaș, cu interfata grafica intuitiva pentru a asambla `cURL command.

  1. Instala și a Începe Poștaș
  2. Tastați în URL-ul, Post Corp, Antete Cerere etc. pp.
  3. Faceți clic pe "Cod"
  4. Selectați cURL din lista drop-down
  5. copy & paste cURL comanda

Notă: Există mai multe opțiuni pentru automate cerere generație în lista drop-down, care este de ce am crezut ca postul meu a fost necesara, în primul rând.

Comentarii (1)

HTTPie este o alternativă recomandată pentru `curl pentru că puteți face doar

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

Se vorbește JSON în mod implicit și se va ocupa atât de setare necesare antet pentru tine, ca de bine de codare date JSON valid. Există, de asemenea,:

Some-Header:value

pentru antete, și

name==value

pentru parametrii șirului de interogare. Dacă aveți o bucată mare de date, puteți, de asemenea citi dintr-un fișier să fie reprezentat JSON:

 field=@file.txt
Comentarii (0)

Daca're testarea de o mulțime de JSON trimite/răspunsuri împotriva unui Odihnitor interfață, poate doriți să verificați Poștaș plug-in pentru Chrome (care vă permite să definiți manual de servicii web teste) și Nod.js bazate pe Newman linie de comandă de companie (care vă permite să automatizeze teste împotriva "colecții" de Poștaș teste.) Atât de liber și deschis!

Comentarii (0)

Ai putea pune, de asemenea, JSON conținut într-un fișier, și-l treacă pentru a se răsuci folosind ---încărcare fișier opțiune, prin intermediul standard de intrare, astfel:

 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
Comentarii (0)

Aceasta a lucrat bine pentru mine, în plus, folosind autentificare de BAZĂ:

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

Desigur, nu trebuie să utilizați niciodată autentificare de BAZĂ fără SSL și verificat certificat.

M-am întâlnit din nou astăzi, folosind Cygwin's cURL 7.49.1 pentru Windows Și atunci când se utilizează --date " sau " --date binare cu un alt argument, cURL a fost confuz și s-ar interpreta{}` în JSON ca un URL șablon. Adăugarea unui "- g " argument pentru a opri cURL expandarea fix asta.

A se vedea, de asemenea, https://stackoverflow.com/questions/8333920/passing-a-url-with-brackets-to-curl.

Comentarii (0)

Aceasta a lucrat pentru mine:

curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
Comentarii (0)

Puteți utiliza poștașul să se convertească la CURL

Comentarii (1)

Eu sunt, folosind formatul de mai jos pentru a testa cu un server web.

use -F 'json data'

Las's presupunem acest JSON format dict:

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

Exemplu complet

curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'
Comentarii (0)

Aceasta a lucrat pentru mine la Windows10

curl-d "{"""owner""":"""sasdasdasdasd"""}" -H "Content-Type: application/json" -X-a PUS http://localhost:8080/api/changeowner/CAR4

Comentarii (0)

Folosiți -d opțiune pentru a adăuga o sarcină utilă

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

În plus:

folosiți -X POST pentru a utiliza metoda POST

folosiți -H 'Accept: application/json' pentru a adăuga accepta tip antet

folosiți -H 'Content-Type: application/json' pentru a adăuga conținut de tip antet

Comentarii (0)

Vă rugăm să verificați acest instrument. Aceasta vă ajută să creați cu ușurință curl fragmente.

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"
Comentarii (0)