Что такое команда cURL и примеры ее использования

20.09.2020

Что такое cURL? cURL — это сокращение от "Client URL". Данная утилита доступна в большинстве систем на основе Unix и часто используется для получения данных по заданному url или передачи и получения файлов по различным протоколам. Команда cURL поддерживает множество протоколов, сред них:

  • HTTP и HTTPS
  • FTP и FTPS
  • IMAP и IMAPS
  • POP3 и POP3S
  • SMB и SMBS
  • SFTP
  • SCP
  • TELNET
  • GOPHER
  • LDAP и LDAPS
  • SMTP и SMTPS

Для работы cURL необходима библиотека libcurl, без нее не будет работать cURL. Если данной библиотеки у вас нет и у вас установлена ОС Ubuntu , то установить ее можно при помощи следующих команд:

$ sudo apt update
$ sudo apt install libcurl3

если у вас установлена ОС Windows, то вам надо будет скачать библиотеку с сайта curl.haxx.se/download.html

Основной синтаксис cURL выглядит следующим образом:

curl [OPTIONS] [URL]

Вот параметры, которые мы будем использовать при отправке запросов:

  • -X, –request- метод HTTP, который будет использоваться.
  • -i, –include- Включить заголовки ответа.
  • -d, –data- Данные, которые должны быть отправлены.
  • -H, –header- Дополнительный заголовок для отправки.

##Проверка версии cURL

$ curl --version

##GET запрос

$ curl www.example.com

##POST запрос Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON. Запрос в виде списка имя=значение:

$ curl --data "param1=test1&param2=test2" http://domain.com

Запрос в виде JSON:

curl  -H 'Content-Type: application/json' --data '{"param1":"test1","param2":"test2"}' http://www.domain.com

Параметр --data эквивалентен -d, оба указывают cURL выполнить HTTP POST-запрос.

##Сохраните вывод cURL в файл Вывод команды cURL может легко сохранить в файл, добавив опцию -o в команде, как показано ниже

$ curl -o website.html https://domain.ru

##Скачивание файла Команды cURL могут загружать файлы из удалённой локации. Есть два способа это сделать: -O сохранит файл в текущем рабочем каталоге с тем же именем, что и у удалённого; -o позволяет указать другое имя файла или местоположение.

Скачать файл и сохранить под оригинальным именем. В этом примере архив filename.tar.gz будет загружен в текущий рабочий каталог.

$ curl -O https://example.com/filename.tar.gz

Скачать файл и сохранить под другим именем:

$ curl -o new_filename.tar.gz https://example.com/filename.tar.gz

Скачать файл надежно через SSH с помощью следующей команды:

$ curl -u user sftp://example.com/path/to/file

Скачать список файлов Можно скачать список файлов, для этого надо создать файл url_list.txt, который содержит список всех URL-адресов для загрузки и запустить следующую команду, которая выполнит загрузку всех файлов с этих URL.

$ xargs –n 1 curl -O < url_list.txt

##Доступ к FTP-серверу Чтобы получить доступ к FTP-серверу с помощью cURL, надо использовать следующую команду:

$ curl ftp://ftp.domain.com --user username:password

cURL будет подключаться к FTP-серверу и выведет список всех файлов и каталогов в домашнем каталоге пользователя Вы можете скачать файл с помощью FTP:

$ curl ftp://ftp.domain.com/filename.zip --user username:password

и загрузить файл на сервер FTP:

$ curl -T filename.zip ftp://ftp.domain.com/ --user username:password

Можно пропустить имя пользователя и пароль для анонимных FTP-соединений.

##Получение заголовков HTTP Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.

$ curl -I http://example.com

Игнорирование ошибки неправильных или самоподписанных сертификатов

Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.

curl -k https://localhost/my_page

Указание типа запроса

Параметры -X или --request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.

$ curl -X PUT -d 'name=mkyong&email=abc@gmail.com' http://domain.com/user/

если требуется передать JSON данные на сервер, то надо указать заголовок Content-Type: application/json и выполнить следующий запрос:

$ curl -X PUT -H "Content-Type: application/json" -d '{"name":"mkyong","email":"abc@gmail.com"}' http://domain.com/user/

пример запроса с типом DELETE

$ curl -X DELETE http://domain.com/user/

Запрос с cookies

Для того что бы использовать cookies в запросе нужно сохранить файлы cookie в файл, а затем получить к ним доступ, используя команду cat или редактор Vim. Вот пример запроса который сохранит cookie в файл:

$ curl --cookie-jar Mycookies.txt http://domain.com/ /index.html -O

теперь можно использовать данный файл что бы сделать запрос с cookies:

curl --cookie Mycookies.txt http://domain.com/

Использование авторизации

Если ресурс закрыт авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или --user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.

$ curl -u <user:password> https://domain.com/need_auth