Как мне отправить данные JSON с помощью Curl из терминала / командной строки в Test Spring REST? - PullRequest
2488 голосов
/ 24 августа 2011

Я использую Ubuntu и установил cURL на него.Я хочу проверить мое приложение Spring REST с помощью cURL.Я написал свой POST-код на стороне 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

Описание ошибки:

Сервер отклонил этот запрос, поскольку объект запроса находится в формате, не поддерживаемом запрошенным ресурсом для запрошенного метода ().

Tomcatlog: «POST / ui / webapp / conf / clear HTTP / 1.1» 415 1051

Какой правильный формат команды cURL?

Это мой код на стороне Java PUT (Я проверил 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;
}

Ответы [ 21 ]

17 голосов
/ 23 мая 2014

Если вы тестируете много JSON-рассылок / ответов по интерфейсу RESTful, вы можете попробовать подключаемый модуль Почтальон для Chrome (который позволяет вручную определять тесты веб-службы) и его компаньон для командной строки Newman на основе Node.js (который позволяет автоматизировать тесты для «коллекций» тестов Postman.) И бесплатно, и открыто!

15 голосов
/ 08 ноября 2017

HTTPie является рекомендуемой альтернативой curl, потому что вы можете сделать только

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

Он говорит по-JSON по умолчанию и будет обрабатывать как установку необходимого вам заголовка, так и кодирование данных в качестве допустимого JSON. Также есть:

Some-Header:value

для заголовков и

name==value

для параметров строки запроса. Если у вас большой кусок данных, вы также можете прочитать его из файла, если он будет закодирован в JSON:

 field=@file.txt
14 голосов
/ 13 июня 2017

Вы также можете поместить содержимое JSON в файл и передать его в curl, используя опцию --file-upload через стандартный ввод, например:

 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
14 голосов
/ 06 июня 2013

Это хорошо сработало для меня, кроме того, с помощью BASIC-аутентификации:

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

Конечно, вы никогда не должны использовать BASIC-аутентификацию без SSL и проверенного сертификата.

Я снова столкнулся с этим сегодня, используя Cygwin cURL 7.49.1 для Windows ... И при использовании --data или --data-binary с аргументом JSON cURL запутался и интерпретировал {} в JSON как шаблон URL. Исправлено добавление аргумента -g для отключения сглаживания cURL.

См. Также Передача URL с квадратными скобками в curl .

13 голосов
/ 16 октября 2016

Это сработало для меня:

curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
7 голосов
/ 10 января 2014

Я использую следующий формат для тестирования с веб-сервером.

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"}'
3 голосов
/ 30 мая 2019

Вы можете использовать почтальон для конвертации в CURL enter image description here

enter image description here

1 голос
/ 09 июля 2019
This worked for me for windows10
curl -d "{"""owner""":"""sasdasdasdasd"""}" -H "Content-Type: application/json" -X  PUT http://localhost:8080/api/changeowner/CAR4
1 голос
/ 13 апреля 2019

Используйте опцию -d для добавления полезной нагрузки

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

Дополнительно:

используйте -X POST для использования метода POST

используйте -H 'Accept: application /json 'для добавления заголовка принимаемого типа

используйте -H' Content-Type: application / json 'для добавления заголовка типа контента

0 голосов
/ 27 мая 2019

Пожалуйста, проверьте этот инструмент . Это поможет вам легко создавать фрагменты скручивания.

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...