curl - это один из самых универсальных инструментов командной строки для работы с сетью. Его используют разработчики, администраторы и DevOps-инженеры, когда нужно быстро скачать файл, обратиться к API или автоматизировать загрузки в скриптах.
Разберёмся, как выстроить удобный и понятный workflow для скачивания файлов с его помощью.
Базовый принцип работы
В самом простом виде curl получает файл по URL и сохраняет его на диск.
Есть два основных варианта:
Скачивает файл с оригинальным именем.
curl -O https://example.com/file.zipПозволяет задать своё имя файла.
curl -o myfile.zip https://example.com/file.zipЭто базовый уровень, но в реальной работе почти всегда нужны дополнительные параметры.
Куда сохраняется файл
По умолчанию файл скачивается в текущую директорию. Чтобы сохранить его в конкретную папку, просто укажи путь:
curl -o downloads/file.zip https://example.com/file.zipЕсли папки нет то её нужно создать заранее.
Работа с редиректами
Многие ссылки (особенно короткие или CDN) используют редиректы. Без дополнительного флага curl может скачать не файл, а HTML-страницу с редиректом.
Решение:
curl -L -O https://example.com/file.zipФлаг -L заставляет curl следовать редиректам.
Отображение прогресса
По умолчанию curl показывает текстовую статистику. Если нужен более привычный прогресс-бар:
curl -# -O https://example.com/file.isoЭто удобно при скачивании больших файлов.
Докачка файла (resume)
Если загрузка прервалась, не обязательно начинать заново:
curl -C - -O https://example.com/file.iso-C - продолжает загрузку с места остановки.
Повторные попытки при ошибках
Сети нестабильны, поэтому полезно сразу добавить retry:
curl --retry 3 --retry-delay 2 -O https://example.com/file.zip3 попытки
пауза 2 секунды между ними
Скачивание нескольких файлов
Можно передать несколько URL:
curl -O https://site.com/file1.txt -O https://site.com/file2.txtИли использовать список:
while read url; do
curl -O "$url"
done < urls.txtТак удобно автоматизировать массовые загрузки.
Ограничение скорости и таймаут
Если не хочешь забивать канал:
curl --limit-rate 2M -O https://example.com/file.zipИли ограничить время ожидания:
curl --max-time 60 -O https://example.com/file.zipАутентификация и заголовки
Если файл доступен только с авторизацией:
curl -u username:password -O https://example.com/file.zipИли через токен:
curl -H "Authorization: Bearer TOKEN" -O https://api.example.com/fileТипичный workflow (как делают на практике)
В реальной задаче команды обычно комбинируются. Например:
curl -L --retry 3 -C - -o backup.tar.gz https://example.com/backup.tar.gzЧто здесь происходит:
-L- учитываем редиректы--retry 3- повторяем при ошибке-C -- продолжаем загрузку-o- задаём имя файла
Такой подход делает загрузку устойчивой и пригодной для автоматизации.
Когда использовать curl
curl особенно полезен, если ты:
пишешь bash-скрипты или CI/CD пайплайны
работаешь с API
скачиваешь файлы на сервере без GUI
автоматизируешь деплой или бэкапы
Он поддерживает HTTP, HTTPS, FTP и другие протоколы, поэтому подходит почти для любых сетевых задач.