Команда curl. Синтаксис

Originally published at: Команда curl. Синтаксис. — cyb3r

Сurl – утилита командной строки для скачивания и загрузки данных. Она выросла из проекта шведского программиста Даниэля Стенберга. Изначально в середине 90-х, на заре развития Интернета, он разрабатывал бота, который должен был загружать с веб-страницы курсы валют и сообщать пользователям IRC эквивалент шведских крон в долларах США. Со временем проект развивался, появлялась поддержка различных протоколов и новые функции. Теперь curl используется для передачи любых данных и ряда других полезных задач. Рассмотрим основные моменты работы с этим инструментом.

Синтаксис и опции curl

Синтаксис команды следующий:

curl [ОПЦИИ] [АРГУМЕНТ]

В качестве аргумента задается, как правило, URL скачиваемого файла. Основные опции перечислены ниже

-# — отображать простой прогресс-бар во время загрузки;

-0 — использовать протокол http 1.0;

-1 — использовать протокол шифрования tlsv1;

-2 — использовать sslv2;

-3 — использовать sslv3;

-4 — использовать ipv4;

-6 — использовать ipv6;

-A — указать свой USER_AGENT;

-b — сохранить Cookie в файл;

-c — отправить Cookie на сервер из файла;

-C — продолжить загрузку файла с места разрыва или указанного смещения;

-m — максимальное время ожидания ответа от сервера;

-d — отправить данные методом POST;

-D — сохранить заголовки, возвращенные сервером в файл;

-e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;

-E — использовать внешний сертификат SSL;

-f — не выводить сообщения об ошибках;

-F — отправить данные в виде формы;

-G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;

-H — передать заголовки на сервер;

-I — получать только HTTP заголовок, а все содержимое страницы игнорировать;

-j — прочитать и отправить cookie из файла;

-J — удалить заголовок из запроса;

-L — принимать и обрабатывать перенаправления;

-s — максимальное количество перенаправлений с помощью Location;

-o — выводить контент страницы в файл;

-O — сохранять контент в файл с именем страницы или файла на сервере;

-p — использовать прокси;

—proto — указать протокол, который нужно использовать;

-R — сохранять время последнего изменения удаленного файла;

-s — выводить минимум информации об ошибках;

-S — выводить сообщения об ошибках;

-T — загрузить файл на сервер;

-v — максимально подробный вывод;

-y — минимальная скорость загрузки;

-Y — максимальная скорость загрузки;

-z — скачать файл, только если он был модифицирован позже указанного времени;

-V — вывести версию.

Основные опции мы рассмотрим на простых примерах.

Просмотр версии curl

Опция -V или —version выводит не только версию curl, но и краткую информацию о поддерживаемых протоколах и функциях:

$ curl --version

Скачивание файла

Если вам требуется скачать файл, запустите curl с опцией –O или –o. Первая из них сохраняет файл в текущей рабочей директории под тем же именем, что и в удаленном месторасположении. Вторая опция позволяет вам указать другое имя и/или место для скачивания.

Cохранение файла под исходным именем (yourfile) в текущей рабочей директории.

$ curl -O http://yourdomain.com/yourfile

Cохранение файла под именем newfile в директории /tmp/examplе/.

$ curl -o /tmp/examplе/newfile http://yourdomain.com/yourfile.tar.gz - сохранение файла под именем newfile.tar.gz в директории /tmp/examplе/

Возобновление прерванной загрузки

Если скачивание по какой-то причине было прервано (например, пользователь нажал Ctrl+C), вы легко можете возобновить его с момента остановки при помощи опции -C – (дефис, С, тире):

$ curl -C - -O http://yourdomain.com/yourfile

Скачивание нескольких файлов

Следующая команда позволит вам скачать info.html с http://yoursite.com и about.html c http://mysite.com в один прием:

$ curl -O http://yoursite.com/info.html/info -O http://mysite.com/about.html/about

Если использовать curl вместе с командой xargs, можно скачивать файлы в соответствии со списком URL, заданном в файле (в данном примере listurls.txt):

$ xargs -n 1 curl < listurls.txt

Использование прокси-сервера

Если вы подключены через прокси-сервер, нужно указать его команде curl при помощи следующих опций (в данном примере имя сервера proxy.yourdomain.com, порт 8080, имя пользователя user, пароль qwerty1234):

$ curl -x proxy.yourdomain.com:8080 -U user:qwerty1234 -O http://yourdomain.com/yourfile

Если ваш прокси-сервер не требует аутентификации, опцию -U user:qwerty1234 указывать не нужно.

Запрос HTTP-заголовков

HTTP-заголовки позволяют удаленному веб-серверу помимо ответа на сам запрос отправлять дополнительную информацию. Она предоставляет клиенту данные о том, как обрабатывать ответ:

Для запроса HTTP-заголовков веб-сайта выполните команду с опцией -I:

$ curl -I https://itproffi.ru

Также эту информацию можно получить, воспользовавшись функциями браузера для разработчиков.

cURL POST-запросы с параметрами

Следующая команда отправит на https://yourdomain.com/info.php параметры firstName и lastName с соответствующими значениями:

$ curl --data "firstName=Ivan&lastName=Ivanov" https://yourdomain.com/info.php

Этим приемом можно пользоваться для симуляции работы обычных веб-форм.

Скачивание файлов с FTP-сервера

Следующая команда скачивает в текущую рабочую директорию файл yourfile с удаленного FTP-сервера ftp://yourftpserver (имя пользователя user, пароль qwerty1234):

$ curl -u user:qwerty1234 -O ftp://yourftpserver/yourfile

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

Загрузка файлов на FTP-сервер

Для загрузки локального файла mylocalfile.tar.gz воспользуйтесь следующей командой:

$ curl -u user:qwerty1234 -T mylocalfile.tar.gz ftp://yourftpserver

Указание агента пользователя

Агент пользователя – часть информации HTTP-запроса. Она показывает, каким браузером пользуется клиент. Можно посмотреть, что имеющаяся версия curl передает по умолчанию и установить новое значение:

$ curl -I http://localhost --user-agent "I am a new web browser"

Запись файлов cookie с веб-сайта

Хотите посмотреть, какие файлы cookie скачиваются на ваш компьютер, когда вы заходите на определенный сайт? Опция —cookie-jar сохраняет их список в файл, который в дальнейшем можно просмотреть при помощи команды cat.

$ curl --cookie-jar cookies.txt https://itproffi.ru/

Отправка файлов cookie на сайт

Полученные в предыдущем примере файлы cookie можно использовать в дальнейших запросах к тому же самому сайту:

$ curl --cookie cookies.txt https://itproffi.ru

Изменение разрешения имен

Если вы веб-разработчик и хотите протестировать локальную версию сайта, прежде чем загружать его на сервер, при помощи опции —resolve можно указать curl выполнять разрешение имени вашего сайта на адрес локального узла, например:

$ curl --resolve www.yourdomain.com:80:localhost http://www.yourdomain.com/

Таким образом, при запросе на http://www.yourdomain.com curl будет запрашивать сайт с локального узла, а не использовать DNS или файл /etc/hosts.

Ограничение скорости скачивания

Чтобы curl не занимал всю пропускную способность канала, можно ограничить скорость скачивания при помощи опции —limit-rate:

$ curl --limit-rate 100K http://yourdomain.com/yourfile -O

Заключение

Мы рассмотрели краткую историю появления curl и наиболее характерные примеры применения этой команды. Для более подробной информации можно обратиться к соответствующей man-странице.