Примеры команд cURL: часть вторая урока cURL

Примеры команд cURL: часть вторая урока cURL

Life-Hack

Первая часть здесь

cURL — это пакет программного обеспечения, состоящий из утилиты командной строки и библиотеки для передачи данных с использованием синтаксиса URL.

cURL поддерижвает множество протоколов, среди них DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet и TFTP.

Загрузить отдельный файл

Следующая команда получит содержимое URL и отобразит его в стандартном выводе (т. е. в вашем терминале).

curl http://mi-al.ru


Чтобы сохранить вывод в файл, сделайте редирект, как показано ниже. Это также приведёт к показу некоторой дополнительной информации по статистике загрузки.

Сохранение вывода cURL в файл

Мы можем сохранить результат команды curl в файл, используя опции -o/-O.

  • -o (o нижнего регистра) результат будет сохранён в файле, заданном в командной строке
  • -O (O верхнего регистра) имя файла будет взято из URL и будет использовано для сохранения полученных данных.

$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html


Теперь будет сохранена страница gettext.html в файле с названием ‘mygettext.html’. Когда curl запущена с опцией -o, она отображает шкалу прогресса загрузки следующим образом.

Когда вы используете curl -O (O верхнего регистра), она сама по себе сохранит содержимое в файл под названием ‘gettext.html’ на локальной машине.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html


Примечание: Когда curl должна писать данные в терминал, она отключает шкалу прогресса, чтобы не было путаницы в напечатанных данных. Мы можем исользовать ‘>’|’-o’|’-O’ опции для передачи результатов в файл. 

Выборка нескольких файлов одновременно

Мы можем загрузить несколько файлов за один раз, задав все URL в командной строке.

curl -O URL1 -O URL2


Команда ниже загрузит оба index.html и gettext.html и сохранит их с теми же именами в текущей директории.

curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html


Пожалуйста, обратите внимание, когда мы загружаем несколько файлов с одного сервера как показано выше, curl попытается повторно использовать соединение.

Следуем за HTTP Location в заголовках с опцией -L

По умолчанию, CURL не следует за HTTP Location в заголовках (редиректы). Когда запрошенная веб-страница перемещена в другое место, то соответствующий ответ будет передан в заголовках HTTP Location.

Например, когда кто-то печатает google.com в строке браузера из своей страны, они автоматически будут перенаправлены на ‘google.co.xx’. Это делается на основе заголовка HTTP Location как показано ниже.

Приведённый выше вывод говорит, что запрашиваемый документ был перемещён в ‘http://www.google.co.th/’.

Вы можете указать curl следовать редиректам, это делается с использованием опции -L как показано ниже. Теперь будет загружен исходный код html с http://www.google.co.th/.

curl -L http://www.google.com


Продоление/Вообновление предыдущей закачки

Используя опцию -C вы можете продолжить закачку, которая была остановлена по каким-либо причинам. Это будет полезным при обрыве загрузки больших файлов.

Если мы говорим ‘-C -’, то curl будет искать, с какого места возобновить загрузку. Мы также можем задать ‘-C <смещение>’. Заданное смещение байт будет пропущено от начала исходного файла.

Начните большую загрузку с curl и нажмите Ctrl-C для остановки посреди закачки.

Закачка была остановлена на 20.1%. Используя “curl -C -” мы можем продолжить загрузку с того места, где мы остановились. Теперь загрузка продолжиться с 20.1%.

Ограничение скорости передачи данных

Вы можете ограничить величину скорости передачи данных опцией –limit-rate. Вы можете передать максимальную скорость в качестве аргумента.

$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html


Команда выше ограничит скорость передачи на 1000 байт/секунду. curl может использовать скорость выше на пиках. Но средняя скорость будет примерно 1000 байт/секунду.

Ниже показан индикатор прогресса для представленной выше команды. Вы можете видеть, что текущая скорость в районе 1000 байт.

Загрузить файл только если он изменён до/после заданного времени

Вы можете получить файлы, которые были изменены после определённого времени, используя опцию -z в curl. Это будет работать и для FTP и для HTTP.

$ curl -z 20-Aug-14 http://www.example.com/file.html


Команда выше загрузит yy.html только если он изменялся позднее чем заданная дата и время.

$ curl -z -20-Aug-14 http://www.example.com/file.html


Команда выше загрузит файл file.html, если он изменялся до заданной даты и времени.

Наберите ‘man curl_getdate’ чтобы узнать больше о различных поддерживаемых синтаксисах для выражений даты.

Прохождение аутентификации HTTP в cURL

Иногда веб-сайты требуют имя пользователя и пароль для просмотра их содержимого. С помощью опции -u вы можете передать эти учётные данные из cURL на веб-сервер как показано ниже.

$ curl -u username:password URL


Примечание: По умолчанию curl использует базовую HTTP аутентификацию. Мы можем задать иные методы аутентификации используя –ntlm | –digest.

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

cURL может также использоваться для загрузки файлов с FTP серверов. Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php


Команда выше загрузит файл xss.php с ftp-сервера и сохранит его в локальной директории.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/


Здесь URL отсылает к директории. Следовательно, cURL сделает список файлов и директорий по заданному URL адресу.

Список/Загрузка с использованием диапазонов.

CURL поддерживает диапазоны заданные в URL. Когда дан диапазон, будут загружены соответствующие файлы внутри этого диапазона. Это будет полезным при загрузке пакетов с сайтов FTP зеркал.

$ curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/


Команда выше сделает список всех пакетов в диапазоне a-z в терминале.

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

Curl также может использоваться для выгрузки на FTP-сервер с опцией -T.

$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com


Команда выше выгрузит файл с именем myfile.txt на FTP-сервер. Вы можете также выгрузить несколько файлов за один раз используя диапазоны.

$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com


Опционально мы можем использовать “.” для получения из стандартного ввода и передачи его на удалённую машину.

$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt


Команда выше получит вывод от пользователя из стандартного ввода и сохранит содержимое на ftp-сервере под именем ‘myfile_1.txt’.

Вы можете задать ‘-T’ для каждого URL, и каждая пара адрес-файл будут определять что куда выгружать

Больше информации с увеличением вербальности и опцией трассировки

Вы можете узнать что происходит, используя опцию -v. Опция -v включает вербальный режим и будет печатать подробности.

curl -v http://www.google.co.th


Команда выше выведет следующее

Если вам нужно больше детальной информации, тогда вы можете использовать опцию –trace. Опция –trace включит полный дамп трассировки всех входящих/исходящих данных для заданного файла

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

Получаем определение слова и его перевод с использованием протокола DICT

Посмотреть список доступных словарей можно так:

curl dict://dict.org/show:db


Получить перевод слова с английского на русский можно так:

curl dict://dict.org/d:girl:fd-eng-rus

Больше информации по DICT можно найти прочитав RFC2229.

Использование прокси для загрузки файла

Мы можем указать cURL использовать прокси для определённых операций, это делается опцией -x. Нам нужно задать хост и порт прокси.

$ curl -x proxysever.test.com:3128 http://google.co.in


Отправка электронной почты с использованием протокола SMTP в curl

cURL также может быть использована для отправки электронной почты по протоколу SMTP. Вам нужно указать адрес от кого, адрес кому и IP адрес почтового сервера как показано ниже.

$ curl --mail-from blah@test.com --mail-rcpt foo@test.com smtp://mailserver.com


Когда команда будет введена, начнётся ожидание введения пользователем данных для письма. Когда вы закончите набирать сообщение, напечатайте . (точку) в качестве последней строки, и письмо будет немедленно отправлено.

Источник