Curl post запрос: Как сделать POST-запрос с помощью cURL
Содержание
Отправка POST-запроса с помощью Curl
Curl — это популярный инструмент командной строки, который позволяет отправлять запросы на сервер, загружать файлы и отправлять веб-формы. Curl поддерживает более 25+ протоколов, включая HTTP, HTTPS, SFTP, FTP, а также имеет встроенную поддержку веб-форм, SSL, аутентификации пользователя и HTTP cookies. Curl работает в Linux, Windows и Mac.
Содержание
- Что такое метод запроса HTTP POST?
- Как отправить POST-запрос с помощью Curl?
- Синтаксис запроса POST в Curl
- Примеры запросов Curl POST
- Отправка тела запроса с помощью Curl
- Отправка данных JSON с помощью Curl
- Отправка данных формы с помощью Curl
- Отправка файла с помощью Curl
- Отправка XML с помощью Curl
- Отправка учетных данных базовой аутентификации с помощью POST-запроса Curl
Что такое метод запроса HTTP POST?
HTTP POST — это один из 9 распространенных методов запроса, поддерживаемых HTTP. Метод HTTP POST позволяет клиентам отправлять, а серверам получать и обрабатывать данные, содержащиеся в теле POST-сообщения. Отправка данных в теле сообщения POST необязательна; некоторые запросы POST могут не содержать содержимого в теле, например, запросы, которые хотят только обновить статус объекта в базе данных. Метод POST часто используется для отправки на сервер форм входа в систему и контактных форм, а также для загрузки файлов и изображений. Метод HTTP POST используется для операций CRUD для создания или обновления ресурса на сервере. POST-запросы могут изменять состояние сервера и не являются идемпотентными.
Как отправить POST-запрос с помощью Curl?
Вы можете отправить POST-запрос с помощью Curl, явно указав метод POST с помощью параметра командной строки -X POST или передав Curl данные с помощью параметра командной строки -d или —data. Если вы передаете данные с помощью параметра командной строки -d и не указываете явно метод HTTP с помощью параметра командной строки -X, Curl автоматически выберет метод HTTP POST для запроса.
Запрос POST в Curl
Выполнить
curl -X POST https://example.com/echo/post/json -H "Content-Type: multipart/form-data" -d '[post data]'
Синтаксис запроса POST в Curl
Ниже приведена команда Curl для создания POST-запроса с телом сообщения:
Curl POST-запрос с телом сообщения
curl -X POST -H "[тип содержимого]" -d "[post data]" [options] [URL]
Где:
- -X: параметр указывает, какой метод запроса HTTP будет использоваться при взаимодействии с сервером
- -H: заголовок content-type указывает тип данных в теле запроса
- -d: параметр указывает данные, которые будут отправлены на сервер в теле POST-сообщения.
Параметр -X указывает, какой метод запроса HTTP будет использоваться при взаимодействии с сервером. Параметр -d определяет данные, которые будут отправлены на сервер в теле POST-сообщения. Заголовок content-type указывает тип данных в теле запроса.
Примеры запросов Curl POST
Ниже приведены примеры отправки запроса Curl POST с подробным описанием:
Отправка тела запроса с помощью Curl
Чтобы разместить данные в теле сообщения запроса с помощью Curl, необходимо использовать параметр командной строки -d или —data. Заголовок Content-Type определяет тип данных в теле сообщения. Сервер будет использовать этот заголовок для интерпретации и обработки полученных данных.
curl -X POST https://example.com/echo/post/json -H "Content-Type: application/json" -d '{"Id": 1, "status": 2}'
Отправка данных JSON с помощью Curl
Если вы хотите разместить JSON-данные с помощью Curl, вам необходимо установить Content-Type в application/json и использовать параметр -d для передачи JSON в Curl. Параметр командной строки -H «Content-Type: application/json» устанавливает тип содержимого JSON. Данные JSON передаются в виде строки.
curl -X POST https://example.com/echo/post/json -H 'Content-Type: application/json' -d '{"e-mail": "my-mail", "password": "my-password"}'
Отправка данных формы с помощью Curl
Если вы хотите отправить данные формы с помощью Curl, вы можете использовать параметры командной строки -F (—form) или -d (—data). При использовании параметра -F данные формы отправляются в формате «multipart/form-data», а при использовании параметра -d данные формы отправляются в формате «application/x-www-form-urlencoded».
curl -X POST https://example.com/echo/post/form -H "Content-Type: application/x-www-form-urlencoded" -d "key1=value1&key2=value2"
Отправка файла с помощью Curl
Если вы хотите отправить файл с помощью Curl, добавьте параметры командной строки -d и -F и начните данные с символа @. После символа @ необходимо указать путь к файлу. По умолчанию Curl предоставляет заголовок Content-Type на основе расширения файла, но вы можете предоставить пользовательский заголовок Content-Type с помощью опции командной строки -H.
curl -d @data.json https://example.com/echo/post/json
Отправка XML с помощью Curl
Чтобы отправить данные XML на сервер с помощью Curl, вы можете передать XML с помощью опции командной строки -d и указать тип данных в теле сообщения с помощью опции -H Content-Type: application/xml.
curl -X POST https://example.com/echo/post/xml -H "Content-Type: application/xml" -d "<Request><Id>1</Id><User>Ivan</User></Request>"
Отправка учетных данных базовой аутентификации с помощью POST-запроса Curl
Вы можете передать учетные данные базовой аутентификации в Curl, используя параметр командной строки —user=»login: password». Curl автоматически шифрует учетные данные пользователя в строку в кодировке base64 и передает их на сервер с помощью заголовка Authorization: Basic [token] header.
Пример запроса базовой аутентификации Curl Post
Запустите
curl -X POST https://example.com/echo/post/json --user "login:password"
Трюки curl | internet-lab.ru
- 9 февраля 2021
Соберу вместе все варианты запросов curl, которые мне пригодились. Для Linux. Для Windows необходимо внести некоторые изменения вместо /dev/null, но мне лень, сами разберётесь, если понадобится.
GET запрос
curl https://example.com
HEAD запрос (или любой другой)
curl -X HEAD https://example.com
POST запрос
curl -X POST -d "var1=1&var2=hello%20world" https://example.com
POST запрос с заголовком
curl -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -d "var1=1&var2=hello%20world" \ https://example. com
POST запрос с несколькими заголовками
curl -X POST \ -H "Content-Type:application/x-www-form-urlencoded" \ -H "term-exp:140000b02b1111277e2222db9b33453f" \ -d "var1=1&var2=hello%20world" \ https://example.com
POST запрос с basic authentication
curl -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -u "username:password" \ -d "var1=1&var2=hello%20world" \ https://example.com
HTTP код страницы (POST)
curl -w "%{http_code}" -X POST -s -o /dev/null \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "var1=1&var2=hello%20world" \ https://example.com
Загрузить файл
curl -i -X POST \ -F filefieldnameinform="@C:/mydir/hello.gif" \ http://example.com/dir/?x=y
Загрузить файл с изменённым Content-Type
curl -i -X POST \ -F file="@C:/mydir/hello.php;type=image/gif;" \ http://example.com/dir/?x=y
Отправка письма с помощью curl
Windows 10 — отправка email через curl
Bash скрипт для выполнения curl
#!/bin/bash HTTP_STATUS_STR="curl -w \"%{http_code}\" -X POST -s -o /dev/null \ -H \"Content-Type: application/x-www-form-urlencoded\" \ -d \"var1=1&var2=hello%20world\" \ https://example. com HTTP_STATUS=`echo $HTTP_STATUS_STR | bash` echo $HTTP_STATUS
Bash скрипт для выполнения curl с получением json значения
Для json установим пакет jq:
apt-get install jq
Допустим, curl возвращает нечто подобное:
{"access_token":"this_is_my_token","token_type":"big","expires_in":86399}
Получаем значение access_token:
#!/bin/bash ACCESS_TOKEN=`curl -X POST -s \ -H "Content-Type:application/x-www-form-urlencoded" \ -u "username:password" \ -d "var1=1&var2=hello%20world" \ https://exanple.com/api \ | jq '.access_token' 2>/dev/null` echo $ACCESS_TOKEN
Cookie
curl -H "cookie: mycookie=admin" -v \ http://example.com/dir/?x=y
Telnet
curl -v telnet://10.11.12.13:445
Не проверять сертификат
curl -k https://example.com
Скачать файл
curl https://example.com/files.zip --output files.zip
Скачать файл с basic authentication
curl \ -k \ -u "username:password" \ https://example. com/files.zip \ --output files.zip
Скачать файл через Proxy
Для указания прокси используется -x или —proxy.
curl --request GET \ -x "http://proxyusername:[email protected]:3128" \ --url 'https://example.com/files.zip' \ --output 'files.zip'
Пока всё, буду дополнять.
Теги
- code
- Linux
Как отправить POST с телом, заголовками и параметрами HTTP с помощью cURL?
Задавать вопрос
спросил
Изменено
4 года, 7 месяцев назад
Просмотрено
213 тысяч раз
Я нашел много примеров того, как использовать простые POST-команды в cURL, но я не нашел примеров того, как отправлять полные HTTP-команды POST, которые содержат:
- Заголовки (базовая аутентификация)
- Параметры HTTP (
s=1&r=33
) - Данные тела, некоторая строка XML
Все, что я нашел, это:
эхо "это тело" | curl -d "ss=ss&qq=11" http://localhost/
Это не работает, и в качестве тела отправляются параметры HTTP.
3
Недостаточно репутации, чтобы комментировать, поэтому оставьте это как ответ, надеясь, что это поможет.
curl -L -v --post301 --post302 -i -X PUT -T "${aclfile}" \ -H "Дата: ${dateValue}" \ -H "Тип контента: ${contentType}" \ -H "Авторизация: AWS ${s3Key}:${подпись}" \ ${хост}:${порт}${ресурс}
Это то, что я использовал для операции acl put корзины S3. Заголовки находятся в -H, а тело, которое представляет собой файл xml, находится в ${aclfile} после -T. Это видно из вывода:
/aaa/?acl * О подключении() к порту 80 192.168.57.101 (#0) * Попытка 192.168.57.101... * Подключено к 192.168.57.101 (192.168.57.101) порт 80 (#0) > ПОСТАВЬТЕ /aaa/?acl HTTP/1.1 > Пользовательский агент: curl/7.29.0 > Хост: 192.168.57.101 > Принять: */* > Дата: Чт, 18 августа 2016 г., 08:01:44 по Гринвичу > Content-Type: application/x-www-form-urlencoded; кодировка = utf-8 > Авторизация: AWS WFBZ1S6SO0DZHW2LRM6U:r84lr/lPO0JCpfk5M3GRJfHdUgQ= > Длина контента: 323 > Ожидать: 100-продолжить > < HTTP/1. 1 100 ПРОДОЛЖИТЬ HTTP/1.1 100 ПРОДОЛЖИТЬ * Мы полностью загружены и отлично < HTTP/1.1 200 ОК HTTP/1.1 200 ОК < x-amz-идентификатор запроса: tx00000000000000000001f-0057b56b69-31d42-по умолчанию x-amz-request-id: tx000000000000000000001f-0057b56b69-31d42-по умолчанию < Тип содержимого: приложение/xml Тип содержимого: приложение/xml < Длина содержимого: 0 Длина содержимого: 0 < Дата: Чт, 18 августа 2016 г., 08:01:45 по Гринвичу Дата: Чт, 18 августа 2016 г., 08:01:45 по Гринвичу < * Соединение №0 с хостом 192.168.57.101 осталось нетронутым
если параметры URL-адреса содержат специальные знаки, такие как "+", используйте --data-urlencode для каждого параметра (содержащего специальные знаки):
curl -G -H "Accept:..." -H "... " --data-urlencode "beginTime=${time}+${zone}" --data-urlencode "endTime=${time}+${zone}" "${url}"
"Параметры" HTTP являются частью URL:
"http://localhost/?name=value&othername=othervalue"
Базовая аутентификация имеет отдельную опцию, нет необходимости создавать собственный заголовок:
-u "пользователь:пароль"
«Тело» POST может быть отправлено через --data
(для application/x-www-form-urlencoded
) или --form
(для multipart/form-data
):
-F "foo=bar" # Значение 'foo' равно 'bar' -F "foo=txt" # указанный файл отправляется как обычный текстовый ввод -F "[email protected]" # указанный файл отправляется как вложение -d "foo=бар" -d "foo= Итак, резюмируем:
curl -d "это тело" -u "user:pass" "http://localhost/?ss=ss&qq=11"1
Как выполнить запрос cURL HTTP Post для загрузки файла и последующего сохранения этого файла?
Задавать вопрос
спросил
Изменено
6 лет, 3 месяца назадПросмотрено
6к разСреда:
Windows 64 cURL build
C:>curl64.exe -V(версия)
- curl 7. 53.1 (x86_64-w64-mingw32) libcurl/7.53.1 WinSSL zlib/1.2.8 WinIDN libssh3/1.7. 0_DEV
- Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
- Features: IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libzMy website has a PHP package for file downloads that требуется сообщение HTTP, чтобы указать файл для загрузки.
Когда я использую браузер, я получаю диалоговое окно OPEN with/SAVE, и я могу без проблем сохранить файл на свой компьютер. Когда я использую cURL, запрошенный файл просто передается на консоль.
Как выполнить запрос cURL HTTP Post для загрузки файла и последующего его сохранения?
- Множество примеров загрузки файла с Почтой...
- Множество примеров создания поста в целом...
- Множество примеров простой загрузки файлов (-O/o)...
Но я не могу найти пример сохранения файла, который возвращает команда Post.
Я пробовал эти три командные строки curl:
C:>curl64. exe -d "download=XYZ.zip&email=&submit=Download" http://www.example.com/downloads/dl.php
C:>curl64.exe -d "download=XYZ.zip&email=&submit=Download" -O XYZ.zip http://www.example.com/downloads/dl.php
curl: имя удаленного файла не имеет длины!C:>curl64.exe -d "download=XYZ.zip&email=&submit=Download" http://www.example.com/downloads/dl.php > XYZ.zip
Доступ запрещен.В первых двух примерах содержимое файла передается на консоль вместо того, чтобы сохранять файл или давать мне возможность сохранить его.
В третьем примере я попытался перенаправить вывод, но получил сообщение «Отказано в доступе». ошибка. Я локальный администратор в системе Windows. Я пробовал разные каталоги. Все еще получаю ту же ошибку.
- download
- http
- curl
После БОЛЬШОГО чтения (всю ночь)... я понял, что заниматься исследованиями, когда вы вымотаны, явно плохо, и вместо этого нужно спать. [усмехается]
Раньше я видел слишком много примеров cURL, где некоторые использовали параметр -O, а другие использовали параметр -o для загрузки файлов. Поскольку для меня все слилось воедино, я не понял, что это два РАЗНЫХ варианта. Прочитав справку cURL в сотый раз, я наконец увидел разницу:
- -O для СКАЧИВАНИЯ файла
- -o для ПЕРЕНАПРАВЛЕНИЯ вывода cURL в файл вместо стандартного вывода
Эта командная строка работает:
C:\cURLtest>curl64.exe -d "download=XYZ.zip&email=&submit=Download" -o XYZ.zip http://www.example.com/downloads/dl.php
Всем, кто потратил время на изучение проблемы (это не было)... Пожалуйста, извините этого болвана за трату вашего времени.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.