Технология Curl в linux
Довольно часто нам необходимо установить какие-либо файлы из интернета. Это могут быть файлы программ, различные архивы, скрипты, и прочее. Правда, не всегда это можно делать из браузера.
Этот процесс можно сделать куда проще с помощью терминала, ибо это может позволить сделать процесс автоматизированным. Хотя, веб-разработчикам иногда все же надо проверять статус сайта, а также проверять, получаемые и отправляемые заголовки, а также много других данных. Подобные задачи может легко решить утилита под названием curl, да и не только эти задачи. Но кроме вышеуказанной проблемы, она также может имитировать действия реального пользователя на сайте.
В данной статье мы разберемся с этой технологией, для каких целей она нужна, как ею пользоваться и так далее.
Введение
Curl — оболочка с большим сборником различным библиотек для работы с сервером. Да, Это также сборник библиотек. В них содержатся основные возможности, которые нужны для работы с URL страницами, а также передачи файлов.
У curl есть возможность работать с большим количеством протоколов: FTPS, TFTP, SCP, SMTP и много других. Ранее было сказано, что с помощью этой технологии можно делать имитацию, но это не далеко не единственное, что можно делать с сайтом, пользуясь помощью данной утилиты.
Также данная библиотека curl существует также и в различных ЯП, и в данной статье мы поговорим об утилите curl. Это своего рода оболочка для этой самой библиотеки.
Синтаксис CURL
Но перед самим использованием и возможностями данной оболочки, давайте изучим синтаксис и обозначение команд, которые пригодятся нам в работе. Синтаксис команд довольно простой, и давайте его изучим:
$ curl option url
Опции curl:
- -# — позволяет делать во время загрузки отображение прогресс-бара.
- -0 — возможность использования протокола http 1.0.
- -1 — использование протокола шифрования tlsv1.
- -2 — использование протокола sslv2.
- -3 — использование протокола sslv3.
- -4 — использование ipv4.
- -6 — использование ipv6.
- -b — сохранение куки в отдельный файл(дальше их можно будет передавать).
- -с — отправление куки из отдельного файла на сервер.
- -С — Если соединение оборвалось, то данная опция поможет его восстановить.
- -d — использование метода POST для отправления данных.
- -D — сохранение заголовков, которые сервер вернул из отдельного файла.
- -e — задает поле Referer-uri, источник, с которого пришел пользователь, будет указан.
- -E — позволяет сделать процесс использования внешнего сертификата SSL.
- -f — отключает вывод сведений об ошибках.
- -F — отправление в виде формы.
- -G — данная опция позволяет передавать данные из опции -d методологией GET.
- -H — позволяет осуществлять передачу заголовков на сервер.
- -I — опция позволяет получать только HTTP заголовок, а прочие данные веб-страницы не читает.
- -j — чтение и отправка куки из отдельного файла.
- -J — удаление заголовков из запроса.
- -L — принятие и обработка направлений.
- -s — максимальный количество процессов перенаправления с помощью метода Location
- -o — вывод контента страницы в отдельный файл
- -O — сохранение контента в отдельный файл с именем веб-страницы, либо использовать имя серверного файла.
- -p — использование прокси.
- —proto — указание протокола, нужного для использования.
- -R — сохранения времени последнего изменения файла, который удалён.
- -s — вывод малых сведений об ошибках.
- -S — вывод сведений об ошибках.
- -v — вывод с подробным объяснением
- -y — Минимальные ограничения по скорости загрузки.
- -Y — Максимальные ограничения по скорости загрузки.
- -z — скачивание файла, но только в случае, если он был обновлен позже заданного времени.
- -V — вывод версии.
Это лишь базовые методы, которые должны хватить для большинства задач. Дальше мы рассмотрим их применение и использования при решений различных задач.
Использование CURL
Пожалуй, мы рассказали всю необходимую теорию, теперь же обратимся к практике. Сейчас мы применим все вышеперечисленное.
Работа с файлами
Пожалуй, наиболее чаще приходится сталкиваться с загрузкой файлов. Установить же необходимый файл довольно несложно. Оболочке curl нужно лишь взять имя, оно может быть взято со страницы, либо же с файла. Делается это так:
curl https://raw.githubusercontent.com/curl/curl/master/README.md
Правда, здесь наступаем маленькая неприятность, ведь данные файла будут на стандартном выводе отправлены, а нужно другое. Для его записи в какой-нибудь файл нужно использовать следующую конструкцию:
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
Файл будет установлен, если его изменения происходили после 2017 года 21 декабря.
Скорость загрузки.Ограничения
Дабы не перегрузить сеть загрузкой файлов, можно воспользоваться ограничениями скорости до нужно уровня -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
Файлы.Передача
Итак, сама по себе загрузка файлов процесс простой, но у curl это не единственная функция, можно например отправлять файлы на ftp-сервер. Используя метод -T, пишем следующую команду:
curl -T login.txt ftp://speedtest.tele2.net/upload/
Ну или же можно проверить отправление файла по протоколу HTTP. Воспользуемся сервисом для этой задачи:
curl -T ~/login.txt http://posttestserver.com/post.php
В ответ получите от curl местонахождение файла, который загрузили.
Работа с данными
Данный метод нужен не только для отправки данных, он также может быть использовать как отправитель форм. Для данного запроса будем использовать -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
Здесь происходит передача пароля, но делается это под видом формы, причем тип: обычный текст. Таким же способом можно передавать и другие данные.
Куки
Cookie нужны сайтам для того, чтобы хранить информацию на стороне юзера. Это может понадобиться для аутентификации. В Curl куки можно передавать. Для этого их нужно сохранить в отдельный файл, используя -с:
curl -c cookie.txt http://posttestserver.com/post.php
Позже можно эти данные возвратить. Пример:
curl -b cookie.txt http://posttestserver.com/post.php
Заголовки.Передача, анализ.
Бывают ситуации, когда нам вовсе не интересно содержимое веб-страницы, а только заголовки на ней, тогда необходимо использовать следующую функцию:
curl -I https://losst.ru
Опция -H же в свою очередь дает возможность отправить определенный заголовок, либо же несколько на сервер. Заголовки можно передать так, что страница возвращается, если она модифицирована:
curl -I —header ‘If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT’ https://losst.ru
Итог
Curl — это эффективная библиотека, которая решает множество проблем. Его синтаксис прост, а функционал огромен.