Как разместить данные JSON с завитком из терминала / командной строки для тестирования весеннего отдыха?
Я использую Ubuntu и установил Curl на нем. Я хочу проверить свое приложение Spring REST с помощью Curl. Я написал свой почтовый код на стороне Java. Однако я хочу проверить его с помощью Curl. Я пытаюсь опубликовать данные JSON. Пример данных выглядит так:
{"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}
Я использую эту команду:
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
он возвращает эту ошибку:
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
описание ошибки такое:
сервер отклонил запрос, потому что объект запроса находится в в формате, не поддерживаемом запрошенным ресурсом для запрошенного метода ().
журнал Tomcat:
"POST / ui / webapp/conf / clear HTTP / 1.1" 415 1051
есть идеи о правильном формате команды Curl?
EDIT:
Это моя сторона Java положить код (я проверил GET и DELETE и они работают)
@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;
}
20 ответов:
вам нужно установить тип контента в application / json. Но
-dотправляет контент-типapplication/x-www-form-urlencoded, который не принят на стороне весны.смотреть на!--17-->curl man page, я думаю, вы можете использовать
-H:-H "Content-Type: application/json"полный пример:
curl --header "Content-Type: application/json" \ --request POST \ --data '{"username":"xyz","password":"xyz"}' \ http://localhost:3000/api/login(
-Hсокращенно--header,-dна--data)отметим, что
-request POSTи дополнительно если вы используете-d, как-dфлаг подразумевает запрос POST.
в Windows все немного по-другому. Вижу нить комментарий.
Попробуйте поместить ваши данные в файл, скажем
body.jsonи затем использоватьcurl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf
вы можете найти resty полезно: https://github.com/micha/resty
это обертка круглый завиток, который упрощает запросы командной строки REST. Вы указываете его на конечную точку API, и он дает Вам команды PUT и POST. (Примеры адаптированы с главной страницы)
$ 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кроме того, часто все еще необходимо добавлять заголовки типов контента. Однако вы можете сделать это один раз, чтобы установить значение по умолчанию для добавления файлов конфигурации для каждого метода на сайт: установка рести по умолчанию варианты
Он работал для меня, используя:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.doон был счастливо сопоставлен с контроллером 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простой POJO с идентификатором собственность.
для Windows, имея одну кавычку для
-dзначение не сработало для меня, но оно сработало после изменения на двойную кавычку. Также мне нужно было избежать двойных кавычек внутри фигурных скобок.то есть, не сработало следующее:
curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/pathно сработало следующее:
curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path
в качестве примера, создайте файл JSON, params.JSON и добавить этот контент к ней:
[ { "environment": "Devel", "description": "Machine for test, please do not delete!" } ]затем вы запускаете эту команду:
curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server
Это хорошо работало для меня.
curl -X POST --data @json_out.txt http://localhost:8080/здесь
-Xозначает глагол http.
--dataозначает, что данные, которые вы хотите отправить.
Я просто столкнулся с той же проблемой. Я мог бы решить ее, указав
-H "Content-Type: application/json; charset=UTF-8"
используя CURL Windows, попробуйте следующее:
curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee
Если вы тестируете много JSON send / responses против интерфейса RESTful, вы можете проверить почтальон плагин для Chrome (который позволяет вручную определять тесты веб-служб) и его узел.js-based Ньюман компаньон командной строки (который позволяет автоматизировать тесты против "коллекций" тестов почтальона.) Как бесплатно, так и открыто!
можно использовать почтальон С его интуитивно понятным графическим интерфейсом для сборки вашего .
- установить и запустить почтальон
- введите свой URL, тело сообщения, заголовки запросов и т. д. стр.
- нажать на кнопку
Code- выберите
cURLиз выпадающего списка- скопировать и вставить код
cURLкомандаПримечание: существует несколько вариантов автоматической генерации запросов в выпадающий список, поэтому я думал, что мой пост был необходим в первую очередь.
это хорошо работало для меня, дополнительно используя обычную аутентификацию:
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конечно, вы никогда не должны использовать обычную аутентификацию без SSL и проверенного сертификата.
я столкнулся с этим снова сегодня, используя cygwin's cURL 7.49.1 для Windows... И при использовании
--dataили--data-binaryС аргументом JSON, cURL запутался и будет интерпретировать{}в JSON в качестве шаблона URL. Добавление-gаргумент для отключения скручивания глобус фиксированный что.
это сработало для меня:
curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
немного поздно на вечеринку, но я не вижу этого сообщения, поэтому здесь вы также можете поместить свой json в файл и передать его в curl с помощью опции --file-upload через стандартный ввод, например:
echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
HTTPie является рекомендуемой альтернативой
curlпотому что вы можете сделать просто$ http POST http://example.com/some/endpoint name=value name1=value1Он говорит JSON по умолчанию и будет обрабатывать как установку необходимого заголовка для вас, так и кодирование данных, а также действительный JSON. Есть также:
Some-Header:valueдля заголовков, и
name==valueдля параметров строки запроса. Если у вас есть большой кусок данных, вы также можете прочитать его из файла, если он закодирован в JSON:
[email protected]
Я использую ниже формат для тестирования веб-сервера.
use -F 'json data'предположим, что это формат JSON dict:
{ 'comment': { 'who':'some_one', 'desc' : 'get it' } }полный пример
curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'
для данных json
curl -H "Content-Type: application/json" -X POST -d '{"params1":"value1","param2":"value2"}' http://localhost:8080/apiЕсли вы хотите опубликовать какой-то файл
curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload --insecureв случае, если вы не хотите, чтобы испортить https и http:
или просто
curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload
Я использую JSON в своем приложении и его просто :
curl -X POST -H "Content-Type:application/json" -d '{"params1":"value1","params2":"value2"} hostname:port/apiно если у вас есть большое количество параметров, всегда предпочитайте использовать файл с телом запроса JSON, как показано ниже:
curl -X POST -H "Content-Type:application/json" -F "data=@/users/suchi/dekstop/JSON_request.txt" hostname:port/api
создать JSON-файл " MyData.json " и добавить содержимое:
[ { "Key_one": "Value_one", "Key_two": "Value_two", "Key_three": "Value_three" } ]после этого необходимо выполнить следующую команду:
curl -v -H "Content-Type: application/json" -X POST --data @MyData.json -u USERNAME:PASSWORD http://localhost:8000/env/add_server
вы можете передать расширение формата, который вы хотите, как конец url. как http://localhost:8080/xx/xxx/xxxx.json
или
http://localhost:8080/xx/xxx/xxxx.xml
Примечание: вам нужно добавить зависимости jackson и jaxb maven в вашем pom.
Comments