Как сделать запрос PUT с curl?

Ответы:

566

Используя -Xфлаг с любым HTTP-глаголом, который вы хотите:

curl -X PUT -d arg=val -d arg2=val2 localhost:8080

В этом примере также используется -dфлаг для предоставления аргументов вашему запросу PUT.

theabraham
источник
17
"man curl" на -X: "Обычно вам не нужна эта опция. Все виды запросов GET, HEAD, POST и PUT скорее вызываются с помощью специальных параметров командной строки." Но я не мог найти другой путь.
Мартин К. Мартин
44
Через год я нашел способ! curl -T
Мартин С. Мартин
2
Поскольку ответ Мартина С. Мартина также меняется на GET после перенаправления с сервера, на мой взгляд, это более полезный ответ.
Мартин
2
Для достижения GETпосле перенаправления добавьте параметр--location
Martin M
1
Curl 7.47, и это не будет работать для меня. ответ theabraham всегда по умолчанию отправляет поведение. --get (или -G), однако, заставит поля -d (--data) стать параметрами url и будет работать.
Джеймс Пауэлл
101

Быстрый ответ:

В одной строке команда curl будет выглядеть так:

а) При отправке данных формы:

curl -X PUT -H "Content-Type: multipart/form-data;" -F "key1=val1" "YOUR_URI"

б) При отправке необработанных данных в формате json:

curl -X PUT -H "Content-Type: application/json" -d '{"key1":"value"}' "YOUR_URI"

в) При отправке файла с запросом POST:

curl -X POST "YOUR_URI" -F 'file=@/file-path.csv'

Альтернативное решение:

Вы можете использовать приложение POSTMAN из Chrome Store, чтобы получить эквивалентный запрос cURL. Это особенно полезно при написании более сложных запросов.

Для запроса с другими форматами или для других клиентов, таких как Java, PHP, вы можете проверить POSTMAN / комментарий ниже.

ПОСТМАН, чтобы получить код запроса

Prateek
источник
4
Понятия не имею, почему за это проголосовали ... Я скопировал здесь идею, как передать тело JSON для curl PUT. Кроме того, почтальон - отличный инструмент для получения кода для более сложных запросов :)
Микаэль Лепистё,
2
Спасибо !! Даже я понятия не имею, почему насчет отрицательных голосов. Может быть нежелание пользователей принять его. Я создал репо всех моих REST API для мобильных устройств в POSTMAN, и это лучший совет по производительности, который я могу предложить всем, кто работает с REST.
Prateek
Пример из реального мира, где я передаю данные и параметры json в конечную точку; curl -X PUT -H "Content-Type: application / json" -d '{"amount": "999", "type": "car", "parent_id": "12345"}' localhost: 8080 /
викрамви
1
Необходимость установить полный браузер (если у него нет Chrome) и расширение для него может быть излишним для некоторых людей imho. По крайней мере, вы могли бы предоставить альтернативу для другого более распространенного (установка по умолчанию) веб-браузера, такого как Firefox, где HttpRequester выполняет аналогичную работу.
rbaleksandar
5
Это может быть опущено, потому что вопрос о скручиваемости.
Tuxayo
28

Пример PUT, следующий за комментарием Мартина С. Мартина:

curl -T filename.txt http://www.example.com/dir/

С -T(так же, как --upload-file) curl будет использовать PUT для HTTP.

Тор Клингберг
источник
8
К сожалению, -Tэто не заменит, -X PUTесли вы хотите указать параметры с помощью -dили -F. -Tотправляет содержимое файла через PUT. Для достижения GETпосле перенаправления добавьте параметр--location
Martin M
Что делать, если filename.txt находится на удаленном сервере?
Босари
7
curl -X PUT -d 'new_value' URL_PATH/key

где,

X - опция для команды запроса

d - опция для размещения данных на удаленном URL

URL_PATH - удаленный URL

new_value - значение, которое мы хотим поместить в ключ сервера

кальяни чаудхари
источник
5

Я опоздал к этой теме, но у меня тоже было подобное требование. Так как мой скрипт динамически создавал запрос на curl, я хотел создать аналогичную структуру команды для GET, POST и PUT.

Вот что у меня работает

Для запроса PUT :

curl --request PUT --url http://localhost:8080/put --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Для запроса POST :

curl --request POST --url http://localhost:8080/post --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

Для запроса GET :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
sunitkatkar
источник