Я использую 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
Описание ошибки таково:
Сервер отклонил этот запрос, потому что объект запроса находится в формате, который не поддерживается запрошенным ресурсом для запрошенного метода ().
Журнал Tomcat: «POST / ui / webapp / conf / clear HTTP / 1.1» 415 1051
Какой правильный формат команды cURL?
Это мой PUT
код на стороне 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;
}
json
rest
spring-mvc
curl
http-headers
kamaci
источник
источник
Ответы:
Вам необходимо установить тип контента для application / json. Но
-d
отправляет Content-Typeapplication/x-www-form-urlencoded
, который не принят на стороне Spring.Глядя на справочную страницу curl , я думаю, что вы можете использовать
-H
:Полный пример:
(
-H
сокращенно--header
,-d
для--data
)Обратите внимание, что
-request POST
это необязательно, если вы используете-d
, так как-d
флаг подразумевает запрос POST.В Windows все немного по-другому. Смотрите ветку комментариев.
источник
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Также этот ответ: stackoverflow.com/questions/18314796/…Попробуйте поместить ваши данные в файл, скажем,
body.json
а затем использоватьисточник
--data-binary
опцию вместо--data
. Можно было бы ожидать, что клиент отправляет данные как есть, но--data
удаляет CR и LF из входных данных.@
символ перед именем файла, иначе он не будет работать. Я просто потратил 20 минут, стуча головой по этомуВам может пригодиться отдых: https://github.com/micha/resty
Это оболочка CURL, которая упрощает запросы REST командной строки. Вы указываете это на свою конечную точку API, и она дает вам команды PUT и POST. (Примеры адаптированы с домашней страницы)
Кроме того, часто все еще необходимо добавлять заголовки типа контента. Вы можете сделать это один раз, чтобы установить по умолчанию добавление файлов конфигурации для каждого метода для каждого сайта: Настройка параметров RESTY по умолчанию
источник
Для Windows наличие единственной кавычки для
-d
значения не работало для меня, но оно работало после перехода на двойную кавычку. Также мне нужно было избегать двойных кавычек в фигурных скобках.То есть следующее не сработало:
Но сработало следующее:
источник
Это сработало для меня, используя:
Это было счастливо сопоставлено с контроллером Spring:
IdOnly
простой POJO со свойством idисточник
Например, создайте файл JSON, params.json, и добавьте в него следующее содержимое:
Затем вы запускаете эту команду:
источник
Я просто столкнулся с той же проблемой. Я мог бы решить это, указав
источник
Это хорошо сработало для меня.
Куда,
-X
Означает глагол http.--data
Означает данные, которые вы хотите отправить.источник
-X POST
данном примере это избыточноВы можете использовать Postman с интуитивно понятным графическим интерфейсом для сборки вашей
cURL
команды.Code
cURL
из выпадающего спискаcURL
командуПримечание: в раскрывающемся списке есть несколько вариантов автоматической генерации запросов, поэтому я решил, что мой пост был необходим в первую очередь.
источник
Используя CURL Windows, попробуйте это:
источник
Вы можете использовать почтальон для конвертации в CURL
источник
HTTPie является рекомендуемой альтернативой,
curl
потому что вы можете сделать толькоПо умолчанию он говорит на JSON и будет обрабатывать как установку необходимого вам заголовка, так и кодирование данных в качестве допустимого JSON. Есть также:
для заголовков и
для параметров строки запроса. Если у вас большой кусок данных, вы также можете прочитать его из файла, если он будет закодирован в JSON:
источник
Если вы тестируете много JSON-сообщений / ответов в отношении интерфейса RESTful, вы можете попробовать подключаемый модуль Postman для Chrome (который позволяет вручную определять тесты веб-служб) и его команду Newman на основе Node.js. -линейный компаньон (который позволяет автоматизировать тесты по «коллекциям» тестов Почтальона.) И бесплатно, и открыто!
источник
Это работало хорошо для меня, дополнительно используя базовую аутентификацию:
Конечно, вы никогда не должны использовать BASIC-аутентификацию без SSL и проверенного сертификата.
Сегодня я столкнулся с этим снова, используя Cygwin cURL 7.49.1 для Windows ... И при использовании
--data
или--data-binary
с аргументом JSON cURL запутался и интерпретировал бы{}
JSON как шаблон URL. Добавление-g
аргумента для отключения cURL globbing исправило это.Смотрите также Передача URL в квадратных скобках для скручивания .
источник
Вы также можете поместить содержимое JSON в файл и передать его в curl, используя
--file-upload
опцию через стандартный ввод, например:источник
Это сработало для меня:
источник
Я использую приведенный ниже формат для тестирования с веб-сервером.
Давайте предположим, что этот формат JSON dict:
Полный пример
источник
Используйте опцию -d для добавления полезной нагрузки
К тому же:
использовать -X POST для использования метода POST
используйте -H 'Accept: application / json', чтобы добавить заголовок типа принятия
используйте -H 'Content-Type: application / json', чтобы добавить заголовок типа контента
источник
Пожалуйста, проверьте этот инструмент . Это поможет вам легко создавать фрагменты скручивания.
источник
Это работает для меня на Windows10
источник
Вот еще один способ сделать это, если у вас есть динамические данные, которые будут включены.
источник
Я знаю, что на этот вопрос было дано много ответов, но я хотел бы поделиться тем, где у меня возникла проблема:
Видишь, я все сделал правильно, только одно - "@" я пропустил до пути к файлу JSON.
Я нашел один соответствующий документ в Интернете - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Надеюсь, что это может помочь немногим. Спасибо
источник
Если вы сконфигурируете SWAGGER для своего приложения с весенней загрузкой и вызовите любой API из своего приложения, вы также сможете увидеть этот CURL-запрос.
Я думаю, что это простой способ генерации запросов через CURL.
источник
Вы можете передать расширение нужного формата в качестве конца URL. например http: // localhost: 8080 / xx / xxx / xxxx .json
или
http: // localhost: 8080 / xx / xxx / xxxx .xml
Примечание: вам нужно добавить зависимости Jackson и Jaxb Maven в вашем POM.
источник