Curl post запрос: Как сделать POST-запрос с помощью cURL

Отправка POST-запроса с помощью Curl

Curl — это популярный инструмент командной строки, который позволяет отправлять запросы на сервер, загружать файлы и отправлять веб-формы. Curl поддерживает более 25+ протоколов, включая HTTP, HTTPS, SFTP, FTP, а также имеет встроенную поддержку веб-форм, SSL, аутентификации пользователя и HTTP cookies. Curl работает в Linux, Windows и Mac.

Содержание

  1. Что такое метод запроса HTTP POST?
  2. Как отправить POST-запрос с помощью Curl?
  3. Синтаксис запроса POST в Curl
  4. Примеры запросов Curl POST
  5. Отправка тела запроса с помощью Curl
  6. Отправка данных JSON с помощью Curl
  7. Отправка данных формы с помощью Curl
  8. Отправка файла с помощью Curl
  9. Отправка XML с помощью Curl
  10. Отправка учетных данных базовой аутентификации с помощью 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 libz

My 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

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.