Как выполнить POST-вызов с данными JSON с помощью curl?

#json #api #curl #post

#json #API #curl #Публикация

Вопрос:

Я пробовал использовать только GET-вызовы с помощью curl, и теперь мне нужно выполнить POST-вызов. Мне нужно указать параметры или ввести данные с помощью JSON. Как мне написать эту команду?

Ответ №1:

Предполагая, что вы спрашиваете, как отформатировать POST-запрос curl с атрибутами JSON.

 curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d "{'json':{'key':'value'}}" http://your.domain/endpoint/here
  

Эта страница охватывает множество полезных случаев.

Комментарии:

1. Спасибо Джеку и Хришикешу, ваш ответ мне очень помог. я сформировал следующую команду curl: curl -i -H «Accept: application / json» -H «Content-Type: application /json» -X POST -d «{‘json’:{«Name»: «web», «TaskTemplate»:{«ContainerSpec»:{«Image»: «nginx: alpine», «Mounts»: [{«VolumeOptions»:{«DriverConfig»:{}}}] ,»User»: «33»}, «LogDriver»:{«Name»: «json-файл», «Options»:{«max-file»: «3»,»max-size»: «10M»}}}}}» https://<IP-адрес>: 2376/services/создать . но это выдало мне ошибку 500, можете ли вы вспомнить, где я допустил ошибку, которая бы мне очень помогла

2. Ваш API, вероятно, не ожидает, что ваш json будет начинаться с ключа с именем json, поэтому удалите это. { «Name»: «web», «TaskTemplate»: { «ContainerSpec»: { «Image»: «nginx: alpine», «Mounts»: [{ «VolumeOptions»: { «DriverConfig»:{}}}], «User»: «33»}, «LogDriver»: { «Name»: «json-файл», «Options»: { «max-file»: «3», «max-size «: «10 М» }}}}

3. я попробовал этот разъем, но это не решило проблему. ниже приведено сообщение об ошибке, которое я получаю: HTTP / 1.1 500 Внутренняя ошибка сервера Тип содержимого: приложение / Сервер json: Docker / 1.12.2 (linux) Дата: Пт, 21 окт 2016 14:12:12 GMT Содержание-Длина: 81

4. Это в значительной степени будет невозможно диагностировать в контексте этого вопроса. Я бы предложил задать новый вопрос и указать, какое приложение запущено на сервере, и журналы приложений. Вероятно, он не может обработать что-то в заданном вводе

Ответ №2:

Вам нужно указать параметр пользовательского заголовка в вашей команде, как показано ниже.
-H/—заголовок «Content-Type: application/json»

Таким образом, полная команда будет выглядеть так: curl -H «Content-Type: application / json» -X POST -d ‘{«имя пользователя»: «abc»,»пароль»:»xyz»}’ http://url/to/some/server

Комментарии:

1. я попробовал ваш формат Hrishikesh. Для меня это работает так, как ожидалось, большое спасибо.

2. Я пытался использовать тот же формат в Linux, но я получаю ошибку «данные не предоставлены».