Введение
curl
— это утилита командной строки для передачи данных на сервер или с сервера, предназначенная для работы без участия пользователя. С помощью curl
вы можете загружать и скачивать данные, используя один из поддерживаемых протоколов, включая HTTP, HTTPS, SCP, SFTP и FTP. curl
предоставляет ряд опций, которые позволяют возобновить передачу, ограничить пропускную способность, поддержку прокси, аутентификацию пользователя и многое другое.
В этом уроке мы покажем вам, как использовать инструмент завитка, на практических примерах и подробных объяснениях наиболее распространенных вариантов завивки.
Установить завиток
Сегодня пакет curl предустановлен в большинстве дистрибутивов Linux.
Чтобы проверить, установлен ли пакет Curl в вашей системе, откройте консоль, введите curl
и нажмите Enter. Если curl
установлен, система напечатает curl: try 'curl --help' or 'curl --manual' for more information
. В противном случае вы увидите что-то вроде curl command not found
.
Если curl
не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.
Установите Curl на Ubuntu и Debian
sudo apt update
sudo apt install curl
Установите Curl на CentOS и Fedora.
sudo yum install curl
Как использовать Керл
Синтаксис команды curl
следующий:
curl [options] [URL...]
В своей простейшей форме, при вызове без каких-либо параметров, curl
отображает указанный ресурс в стандартном выводе.
Например, чтобы получить домашнюю страницу example.com
, вам нужно будет запустить:
curl example.com
Команда напечатает исходный код домашней страницы example.com
в окне терминала.
Если протокол не указан, curl
пытается угадать, какой протокол вы хотите использовать, на основе указанного вами адреса, и по умолчанию будет использоваться HTTP
.
Сохраните вывод в файл
Чтобы сохранить результат команды curl
, используйте параметр -o
или -O
.
Параметр -o
(нижний регистр) сохраняет файл с именем файла по умолчанию, которое в следующем примере — vue-v2.6.10.js
:
curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Параметр -O
(верхний регистр) сохраняет файл с исходным именем:
curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Скачать несколько файлов
Чтобы загрузить несколько файлов одновременно, используйте несколько опций -O
, а затем URL-адрес в файле, который вы хотите загрузить.
В следующем примере мы загружаем ISO-файлы Arch Linux и Debian:
curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso \
-O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso
Возобновить загрузку
Вы можете возобновить загрузку с помощью опции -C -
. Это полезно, если соединение обрывается во время загрузки большого файла и вместо того, чтобы начать загрузку с нуля, вы можете продолжить предыдущую.
Например, если вы загружаете iso-файл Ubuntu 18.04 с помощью следующей команды:
curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
и вдруг соединение прерывается, вы можете возобновить загрузку с помощью этой команды:
curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
Получить заголовки HTTP URL-адреса (заголовки HTTP)
Заголовки HTTP представляют собой пары ключ-значение, разделенные двоеточиями, содержащие такую информацию, как пользовательский агент, тип контента и кодировка. Заголовки передаются между клиентом и сервером вместе с запросом или ответом.
Используйте параметр -I
, чтобы получить только заголовки HTTP указанного ресурса:
curl -I --http2 https://www.ubuntu.com/
Проверьте, поддерживает ли веб-сайт HTTP/2
Чтобы проверить, поддерживает ли конкретный URL-адрес новый протокол HTTP/2, извлеките заголовки HTTP с параметром -I
вместе с параметром --http2
:
curl -I --http2 -s https://noviello.it/| grep HTTP
Параметр -s
позволяет команде curl
выполняться без вывода сообщений (без вывода сообщений) и скрывать индикатор состояния и сообщения об ошибках.
Если удаленный сервер поддерживает HTTP 2, curl
выводит HTTP/2.0 200
:
HTTP/2 200
В противном случае ответ HTTP/1.1 200
:
HTTP/1.1 200 OK
Если у вас curl версии 7.47.0
или новее, вам не нужно использовать параметр --http2
, поскольку HTTP/2 включен по умолчанию для всех соединений HTTPS.
Следите за редиректами
По умолчанию curl
не отслеживает заголовки расположения HTTP.
Если вы попытаетесь получить версию google.com
без www, вы заметите, что вместо получения исходного кода страницы вы будете перенаправлены на версию с www:
curl google.com
Параметр -L
указывает утилите curl
следовать любым перенаправлениям, пока не достигнет конечного пункта назначения:
curl -L google.com
Изменить пользовательский агент
Иногда при загрузке файла удаленный сервер может быть настроен на блокировку Curl User-Agent или на возврат другого контента в зависимости от устройства и браузера посетителя.
В подобных ситуациях для эмуляции другого браузера используйте параметр -A
.
Например, для эмуляции Firefox 60 вы должны использовать:
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/
Укажите максимальную скорость передачи
Параметр --limit-rate
позволяет ограничить скорость передачи данных. Значение может быть выражено в байтах, килобайтах с суффиксом k
, мегабайтах с суффиксом m
и гигабайтах с суффиксом g
.
В следующем примере curl
загрузит бинарный файл Go и ограничит скорость загрузки до 1 МБ:
curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
Этот параметр полезен, чтобы не использовать всю доступную полосу пропускания.
Передача файлов через FTP
Чтобы войти на FTP-сервер, защищенный curl
, используйте параметр -u
и укажите имя пользователя и пароль, как показано ниже:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
После входа в систему команда выводит список всех файлов и каталогов в домашнем каталоге пользователя.
Вы можете загрузить один файл с FTP-сервера, используя следующий синтаксис:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz
Чтобы загрузить файл на FTP-сервер, используйте параметр -T
, за которым следует имя файла, который вы хотите загрузить:
curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
Отправить куки
Иногда может потребоваться сделать HTTP-запрос с определенными файлами cookie, чтобы получить доступ к удаленному ресурсу или отладить проблему.
По умолчанию при запросе ресурса с помощью curl
файлы cookie не отправляются и не сохраняются.
Чтобы отправить файлы cookie на сервер, используйте параметр -b
, за которым следует имя файла, содержащего файлы cookie, или строка.
Например, чтобы загрузить rpm- файл jdk-10.0.2_linux-x64_bin.rpm
Oracle Java JDK, вам нужно передать файл cookie с именем oraclelicense
со значением a
:
curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm
Используйте прокси
curl
поддерживает несколько типов прокси, включая HTTP, HTTPS и SOCKS. Для передачи данных через прокси-сервер используйте параметр -x
( --proxy
), за которым следует URL-адрес прокси-сервера.
Следующая команда загружает указанный ресурс, используя прокси 192.168.44.1
на порту 8888
:
curl -x 192.168.44.1:8888 http://linux.com/
Если прокси-сервер требует аутентификации, используйте параметр -U
( --proxy-user
), за которым следует имя пользователя и пароль, разделенные двоеточием ( user:password
):
curl -U username:password -x 192.168.44.1:8888 http://linux.com/
Вывод
curl
— это инструмент командной строки, который позволяет передавать данные на удаленный хост или с него. Это полезно для устранения неполадок, загрузки файлов и многого другого.
Для получения дополнительной информации о curl
посетите страницу документации Curl.