Как пользоваться curl
Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.
Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.
Что такое curl?
На самом деле, curl — это больше чем просто утилита командной строки для Linux или Windows. Это набор библиотек, в которых реализуются базовые возможности работы с URL страницами и передачи файлов. Библиотека поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах и других операций с URL адресами.
Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl — это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.
Команда curl
Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:
$ curl опции ссылка
Теперь рассмотрим основные опции:
- -# — отображать простой прогресс-бар во время загрузки;
- -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 linux, но здесь перечислено все основное, что вам придется использовать.
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Самая частая задача — это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md
А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md
Если загрузка была неожиданно прервана, вы можете ее возобновить:
curl -# -C — -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Если нужно, одной командой можно скачать несколько файлов:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Еще одна вещь, которая может быть полезной администратору — это загрузка файла, только если он был изменен:
curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:
curl —limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:
curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md
Передача файлов
Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:
curl -T login.txt ftp://speedtest.tele2.net/upload/
Или проверим отправку файла по HTTP, для этого существует специальный сервис:
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:
curl -d «field1=val&fileld2=val1″http://posttestserver.com/post.php
Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:
curl -F «password=@pass;type=text/plain» http://posttestserver.com/post.php
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:
curl -c cookie.txt http://posttestserver.com/post.php
Затем можно отправить cookie curl обратно:
curl -b cookie.txt http://posttestserver.com/post.php
Передача и анализ заголовков
Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:
curl -I https://losst.pro
А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:
curl -I —header ‘If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT’ https://losst.pro
Аутентификация curl
Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:
curl -u ftpuser:ftppass -T — ftp://ftp.testserver.com/myfile_1.txt
Точно так же будет выполняться аутентификация на серверах HTTP.
Использование прокси
Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:
curl -x proxysever.test.com:3128 http://google.co.in
Выводы
В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.
curl command in Linux with Examples
curl is a command-line tool to transfer data to or from a server, using any of the supported protocols (HTTP, FTP, IMAP, POP3, SCP, SFTP, SMTP, TFTP, TELNET, LDAP, or FILE). curl is powered by Libcurl. This tool is preferred for automation since it is designed to work without user interaction. curl can transfer multiple files at once.
Syntax:
URL: The most basic use of curl is typing the command followed by the URL.
This should display the content of the URL on the terminal. The URL syntax is protocol dependent and multiple URLs can be written as sets like:
URLs with numeric sequence series can be written as:
Progress Meter: curl displays a progress meter during use to indicate the transfer rate, amount of data transferred, time left, etc.
If you like a progress bar instead of a meter, you can use the -# option as in the example above, or –silent if you want to disable it completely.
Example:
Options:
-o: saves the downloaded file on the local machine with the name provided in the parameters.
Syntax:
- The above example downloads the file from the FTP server and saves it with the name hello.zip.
-O: This option downloads the file and saves it with the same name as in the URL.
Syntax:
-C -: This option resumes download which has been stopped due to some reason. This is useful when downloading large files and was interrupted.
Syntax:
- Example:
- Output:
–limit-rate: This option limits the upper bound of the rate of data transfer and keeps it around the given value in bytes.
Syntax:
- The command limits the download to 1000K bytes.
-u: curl also provides options to download files from user authenticated FTP servers.
Syntax:
-T: This option helps to upload a file to the FTP server.
Syntax:
- If you want to append an already existing FTP file you can use the -a or –append option.
–libcurl: This option is very useful from a developer’s perspective. If this option is appended to any cURL command, it outputs the C source code that uses libcurl for the specified option. It is a code similar to the command line implementation.
Syntax:
- The above example downloads the HTML and saves it into log.html and the code in code.c file. The next command shows the first 30 lines of the code.
-x, –proxy: curl also lets us use a proxy to access the URL.
Syntax:
- If the proxy requires authentication, it can be used with the command:
Sending mail: As curl can transfer data over different protocols, including SMTP, we can use curl to send mails.
Syntax:
curl –url [SMTP URL] –mail-from [sender_mail] –mail-rcpt [receiver_mail] -n –ssl-reqd -u
: -T [Mail text file]
DICT protocol: The Libcurl defines the DICT protocol which can be used to easily get the definition or meaning of any word directly from the command line.
Syntax:
Note: There are a number of other options provided by cURL which can be checked on the main page. The libcurl library has been ported into various programming languages. It’s advisable to visit the individual project site for documentation.