Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

cURL: 8 шокирующих трюков — вот что скрывает командная строка, даже если вы думали, что знаете всё!

cURL — это один из самых универсальных и мощных инструментов командной строки. Когда дело касается работы с интернетом, он способен почти на всё: если ресурс доступен по URL, cURL справится без вопросов! В своей самой базовой форме cURL просто "берёт" содержимое по указанному URL и отображает его прямо в терминале: Что именно появится — полностью зависит от самого ресурса. Запросите сайт — увидите HTML-код: Хотите сохранить страницу в файл — делается это тоже очень просто: При выводе в файл, cURL автоматически покажет информацию о скорости и времени загрузки в стандартный поток ошибок: Если в адресе есть специальные символы — например, «?» или «#», — обязательно заключайте URL в одинарные кавычки. Лучше сделать это своей привычкой: так вы избежите случайных ошибок. Если попытаться скачать через cURL бинарный файл, например, изображение или Word-документ, вы получите предупреждение: «Бинарный вывод может повредить ваш терминал». Это потому, что по умолчанию cURL выводит контент как тек
Оглавление

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

Загрузка веб-страницы

Начнём с самого простого

В своей самой базовой форме cURL просто "берёт" содержимое по указанному URL и отображает его прямо в терминале:

Что именно появится — полностью зависит от самого ресурса. Запросите сайт — увидите HTML-код:

-2

Хотите сохранить страницу в файл — делается это тоже очень просто:

При выводе в файл, cURL автоматически покажет информацию о скорости и времени загрузки в стандартный поток ошибок:

-3

Если в адресе есть специальные символы — например, «?» или «#», — обязательно заключайте URL в одинарные кавычки. Лучше сделать это своей привычкой: так вы избежите случайных ошибок.

Скачиваем файлы на раз-два

Забудьте про “Сохранить как”

Если попытаться скачать через cURL бинарный файл, например, изображение или Word-документ, вы получите предупреждение: «Бинарный вывод может повредить ваш терминал». Это потому, что по умолчанию cURL выводит контент как текст прямо в экран.

В таком случае вам советуют явно указывать опцию --output (или коротко -o), чтобы сохранить файл, а не выводить его на экран:

Файл окажется в текущей папке. При сохранении в файл, вместо лавины нечитаемого текста вы увидите лаконичную статистику о загрузке. Хотите видеть симпатичный прогресс-бар? Используйте -# или --progress-bar:

-4

Молниеносная установка программ прямо из интернета

Главное — доверяйте только проверенным источникам!

Порой в инструкциях предлагают установить программу через cURL — одной командой. Например, для утилиты atuin (продвинутая история команд) нужна всего строка в терминале:

Если просто открыть ссылку через браузер, вы увидите установочный shell-скрипт. Его можно сначала скачать, а можно ещё быстрее — сразу передать в shell с помощью конвейера. Важно: всё, что cURL скачает таким образом, тут же отправится на выполнение через sh.

В примере с atuin используется сразу несколько опций cURL:

Но всегда будьте осторожны: скачивать и запускать скрипты напрямую из интернета — это всегда риск. Не просто доверяйте адресу: убедитесь, что никто не подменил сайт или скрипт по пути (например, не было атаки "человек посередине"). HTTPS снижает риски, а самый верный способ — скачать файл, прочитать, а уже потом запускать.

Узнай свой внешний IP — мгновенно!

Абсолютный хит среди cURL-команд

Самый быстрый способ узнать свой внешний IP — воспользоваться сервисом ifconfig.co через cURL:

В результате вы получите только ваш IP-адрес:

-5

Такой лаконичный ответ отлично подходит для автоматизации. Если зайти по этому адресу браузером, сервис покажет расширенную страницу — с вашей страной, регионом и прочей информацией:

-6

Разница в ответе определяется User-Agent-ом. По умолчанию cURL отправляет что-то вроде «curl/8.x.x». Хотите выглядеть как обычный браузер? Укажите -A или --user-agent:

Теперь сайт пришлёт обычную, "браузерную" страницу:

Как узнать свой внешний IP в bash-скрипте на Linux

Посмотрите на себя глазами интернета.

Смотрим на HTTP-заголовки изнутри — прямой доступ

Погружаемся в дебри

Иногда нужно увидеть не сам контент, а только заголовки ответа — например, чтобы найти причину ошибки или понять, как кэшируются файлы. Для этого пригодятся опции -I или --head:

-8

Этот способ делает HTTP HEAD-запрос, но не все серверы его поддерживают. Если получите ошибку — вместо него используйте GET и покажите только заголовки:

Чтобы увидеть все детали запроса и ответа, добавьте --verbose или коротко -v:

-9

Работаем с API — всё под рукой!

На практике — проще некуда

Для работы с API есть специальные программы, как Postman, но часто проще и быстрее использовать cURL. Пример для тренировки — сервис DummyJSON: это учебный API с готовой базой данных. Здесь можно отрабатывать запросы, играться с авторизацией, проверять редиректы и случайные ответы.

Отправить запрос через cURL — дело одной команды: просто укажите нужный endpoint:

Результат — небольшой JSON: если используете GET, то в ответе поле method покажет именно "GET":

-10

Результаты удобно обрабатывать стандартными инструментами унивсов Unix — например, извлекать нужные данные из JSON при помощи jq. Например, получаем первый товар из списка так:

Как распарсить JSON в Linux-терминале через jq

Благодаря jq вытаскиваем из JSON всё что угодно — покажу самые простые лайфхаки!

Получаем свежие новости (RSS) прямо из терминала

Намного круче, чем кажется!

В одном из моих последних проектов — консольном RSS-клиенте — cURL стал сердцем всей работы: он быстро скачивает ленты и отлично дружит с разными протоколами. Вот так можно просто забрать RSS-ленту и посмотреть её “сырьё”:

-12

Если у вас стоит libxml, анализировать XML удобно через xmllint:

Например, чтобы вытащить заголовок канала из RSS-ленты с помощью XPath-запроса:

-13

cURL для программистов — автоматизируйте всё подряд!

Почти безграничные возможности

Проект cURL — это не только консольная команда. Есть ещё библиотека libcurl, с которой и работает сам cURL. Она есть и для Linux, и для Windows, macOS, Android. Libcurl написана на C, но для неё есть обёртки для C++, Python, Rust, Go и многих других языков.

Подпишитесь на рассылку с лайфхаками по cURL и работе в терминале!

Через libcurl доступны почти все функции, что есть в командной строке cURL. Вот пример, как это реализуется на PHP:

curl_init() запускает новую сессию и возвращает дескриптор. Настройки делаются через curl_setopt(). curl_exec() отправляет запрос. Ошибки ловятся через curl_error(), а завершение — через curl_close().

В примере используется настройка CURLOPT_FILE — она позволяет сразу сохранить тело ответа в файл. Это аналог опции --output в обычном cURL.

Всегда есть что изучить!

Хотите ещё круче владеть терминалом? Начните с git или попробуйте пару bash-лайфхаков — какой простор для возможностей открывается!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: