Полное руководство по скачиванию файлов с помощью cURL

Комментарии: 0

Client URL (cURL) — это утилита, предназначенная для загрузки файлов, работы с API и тестирования работы веб-ресурсов. Инструмент совместим с Windows, macOS и Linux, что делает его удобным для пользователей любых операционных систем. Client URL подойдет тем, кому нужно просто скачать файл, а также для работы, связанной с передачей данных и встроенным использованием в скриптах.

В этой статье рассмотрим, как скачать файл через cURL, о самых полезных командах для скачивания с указанием директории, имени, обработкой редиректов, ограничением скорости и т.д. Также вы узнаете командах при использовании cURL в ОС Windows, Linux и macOS.

Client URL.jpg

Управление именами файлов

При скачивании важно правильно задать имя файла. cURL выводит загруженные данные в терминал, но не сохраняет их. По этой причине, если не указать, куда загрузить файл, он не появится в файловой системе.

Все команды cURL вводятся в командной строке: в Windows — cmd или PowerShell, в Linux и macOS — терминал.

Чтобы задать имя файла вручную, используется -o (или его длинная версия --output).

Например:


curl -o test.html https://example.com

Эта команда скачает страницу https://example.com и сохранит ее как test.html в текущей директории.

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

Как с помощью cURL сохранить файл, задав полный путь:


curl -o ~/Downloads/test.html https://example.com

Этот вариант сохранит файл в папке Downloads в домашней директории пользователя.

Если в папке уже есть файл с таким же именем, cURL без предупреждения его перезапишет. Чтобы этого избежать, используют -O, для сохранения под именем из URL:


curl -O https://example.com/file.txt

Если в URL указан file.txt, он будет загружен с этим же именем. Однако если такой файл уже существует, он перезапишется.

Чтобы избежать потери данных, можно добавить проверку перед скачиванием:


if [ -f file.txt ]; then
    echo "Файл уже существует!"  
else  
    curl -O https://example.com/file.txt  
fi

Этот скрипт сначала проверяет наличие файла и загружает его только при отсутствии.

Обработка редиректов

Иногда файлы не хранятся по статическому адресу, а загружаются через редиректы. Например, при попытке скачать файл браузер может перенаправить пользователя на другую страницу перед началом загрузки. По умолчанию cURL не следует редиректам, но это можно исправить.

Чтобы cURL автоматически переходил по редиректам, используется флаг -L:


curl -L -o test.zip https://example.com/download

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

Зачем это нужно:

  • Обход промежуточных страниц. Некоторые сайты используют редиректы для учёта загрузок, проверки прав доступа или показа рекламы.
  • Работа с сокращенными ссылками. Например, сервисы вроде Bit.ly или TinyURL перенаправляют пользователя на реальный URL, и без -L cURL скачает не сам файл, а HTML-страницу с редиректом.
  • Поддержка HTTPS-редиректов. Некоторые сайты сначала перенаправляют запрос с http:// на https://, и без -L скачивание не удастся.

Если редиректов несколько, cURL пройдет по всей цепочке, пока не достигнет конечного URL. Однако если сервер зациклен на редиректах, это может привести к бесконечному циклу. Чтобы ограничить количество перенаправлений, можно использовать --max-redirs:


curl -L --max-redirs 5 -o file.zip https://example.com/download

Этот параметр ограничивает количество редиректов, через которые cURL будет следовать. Если цепочка редиректов превышает указанное количество, загрузка будет прервана.

При превышении лимита редиректов cURL выводит ошибку, например:


curl: (47) Maximum redirection limit reached

Скачивание нескольких файлов

При помощи cURL скачать несколько файлов можно разными способами, однако, одни команды работают одинаково во всех операционных системах, а другие отличаются для Windows и Linux/macOS.

Способы, работающие во всех ОС

  • Если файлы находятся на одном сервере, можно просто указать несколько -O:
    
    curl -O https://example.com/file1.zip -O https://example.com/file2.zip
    
    
  • Если файлы следуют по порядку (например, file1.zip, file2.zip, file3.zip), можно использовать фигурные скобки {}:
    
    curl -O https://example.com/file{1,2,3}.zip
    
    

Для Windows

  • В ОС Windows, если у вас есть список URL в файле urls.txt, скачать файл можно, используя команду:
    
    Get-Content urls.txt | ForEach-Object { curl -O $_ }
    
    
  • Если файлы пронумерованы, можно использовать цикл:
    
    For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
    
    

Для Linux и macOS

  • Скачивание из списка.

    Сначала создайте файл urls.txt, содержащий список ссылок:

    
    https://example.com/file1.zip 
    https://example.com/file2.zip 
    https://example.com/file3.zip
    
    

    Затем выполните команду:

    
    xargs -n 1 curl -O < urls.txt
    
    
  • Скачивание в цикле (Bash).

    В случае, когда файлы пронумерованы, удобно использовать for:

    
    for i in {1..5}; do 
     curl -O https://example.com/file$i.zip 
    done
    
    

Ограничение скорости скачивания

Если стоит задача с помощью cURL скачать большой файл, то можно установить ограничение скорости, чтобы снизить нагрузку на сеть или избежать возможной блокировки со стороны сервера. Для этого используется флаг --limit-rate, позволяющий задать максимальную скорость скачивания в килобайтах (k), мегабайтах (m) или гигабайтах (g) в секунду.

Формат команды одинаков для всех операционных систем:


curl --limit-rate 500k -O https://example.com/archive.zip

Здесь 500k означает, что скорость скачивания не превысит 500 КБ/с.

Другие примеры:

  • --limit-rate 2m — ограничение 2 МБ/с;
  • --limit-rate 100k — ограничение 100 КБ/с.

Пример скриптов для скачивания archive1.zip, archive2.zip и archive3.zip со скоростью не выше 500 КБ/с.

Windows (PowerShell):


1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }

Linux/macOS (Bash):


for i in {1..3}; do 
 curl --limit-rate 500k -O https://example.com/archive$i.zip 
done

Ограничение скорости скачивания через --limit-rate помогает сделать соединение более стабильным, избежав существенной перегрузки сети. Это полезно, если одновременно загружается несколько файлов или выполняются другие сетевые задачи. Также --limit-rate снижает риск блокировки со стороны серверов, которые могут устанавливать лимиты на скорость загрузки. Если скачивание выполняется через прокси, этот параметр уменьшает нагрузку и помогает избежать разрыва соединения. Также эта команда позволяет контролировать расход трафика при использовании мобильного интернета или тарифов с ограниченным объемом данных.

«Тихие скачивания»

По умолчанию cURL отображает в терминале прогресс загрузки, скорость скачивания и другие сообщения. Однако в некоторых случаях это не требуется, например, в скриптах или автоматических процессах. Чтобы скрыть вывод, используется флаг -s или --silent.

Пример команды, как скачать файлы с помощью cURL в «тихом» режиме:


curl -s -O https://example.com/file.zip

Эта команда позволяет скачать файлы с помощью cURL без вывода информации в терминал. Если важно скрыть прогресс, но оставить сообщения об ошибках, используется -S (--show-error):


curl -s -S -O https://example.com/file.zip

Аутентификация

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

Если для доступа требуется логин и пароль, их можно передать с флагом -u:


curl -u username:password -O https://example.com/protected-file.zip

Если пароль содержит специальные символы (например, @, #, & и т. д.), его лучше заключить в кавычки:


curl -u username:"your@password#123" -O https://example.com/protected-file.zip

Если передать только имя пользователя, cURL запросит пароль отдельно.

Другой способ авторизации — использование токена доступа. В этом случае токен передается в заголовке запроса:


curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json

Некоторые сервисы требуют передавать токен прямо в URL. Тогда команда будет выглядеть так:


curl -O https://api.example.com/data.json?access_token=your_token_here

Однако передача токена в URL может быть небезопасной, так как URL может быть сохранен в журнале браузера или логах сервера.

Такие методы аутентификации полезны для скачивания файлов с защищенных серверов, работы с API и загрузки данных в корпоративных сетях.

Скачивание через прокси

Для работы с прокси удобно использовать именно cURL благодаря поддержке передачи данных через большинство протоколов.

Задать прокси можно с помощью -x (или --proxy).

Основная структура команды следующая:


curl -x [схема://]прокси-сервер[:порт] -o output.file URL

Пример: загрузка файла через HTTP-прокси:


curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip

Где:

  • -x http://proxy.testnet.com:80 — указывает HTTP-прокси и его порт;
  • -o archive.zip — задает имя файла для сохранения;
  • https://example.com/archive.zip — адрес скачиваемого файла.

Если прокси требует логин и пароль, их можно передать так:


curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip

Альтернативный вариант — передать аутентификацию в URL:


curl -x http://user:[email protected]:80 -o archive.zip https://example.com/archive.zip

Для работы через SOCKS5 или SOCKS4 используйте флаг --proxy с указанием типа:


curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip

Важный нюанс:

  • socks5h:// — позволяет передавать DNS-запросы через прокси, повышая анонимность;
  • socks5:// — передает DNS-запросы напрямую (менее безопасно).

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

Отслеживание прогресса скачивания

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

Флаг -# или --progress-bar заменяет стандартные проценты загрузки на визуальную шкалу. Это удобно, когда нужен лаконичный и наглядный индикатор:


curl -# -o file.zip https://example.com/file.zip

Во время скачивания появится строка с динамически заполняющимся индикатором:

1.jpg

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

Если требуется более детальная статистика о скорости, времени и объеме скачанных данных, используйте опции -v (verbose) и -w (write-out).

  • Пример с -v (показывает дополнительные технические детали):
    
    curl -v -o file.zip https://example.com/file.zip
    
    
  • Для вывода ключевых метрик по завершении загрузки можно задать формат с -w:
    
    curl -o file.zip -w "Скорость загрузки: %{speed_download} байт/сек\n" https://example.com/file.zip
    
    

Этот флаг выводит скорость скачивания в заданном формате.

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

Информация о запросах и ответах сервера

За счет использования cURL можно получить различную информацию, которая помогает диагностировать возможные ошибки, разрывы соединения, редиректы и параметры HTTP-ответа. Для этого используется флаг -v (verbose), который включает расширенный режим вывода.

Пример использования:


curl -v -o file.zip https://example.com/archive.zip

Во время выполнения команды в терминале появится примерно такой вывод:

2.jpg

Среди ключевых данных можно увидеть:

  • IP-адрес сервера и установление соединения;
  • исходный HTTP-запрос;
  • статус ответа сервера;
  • заголовки ответа — включают Content-Type, дату, а также параметры кэширования.

Вывод детальной информации о запросах и ответах сервера с помощью флага -v в cURL помогает понять, как клиент взаимодействует с сервером. Например, можно проверить редиректы — если сервер перенаправляет на другой URL, -v покажет статус 301 Moved Permanently или 302 Found.

Также это помогает диагностировать ошибки, такие как 403 Forbidden или 404 Not Found, которые указывают на ограниченный доступ или отсутствие файла. Кроме того, можно анализировать заголовки ответа, чтобы проверить различные параметры файла перед загрузкой.

cURL против Wget

cURL и Wget — два популярных инструмента для скачивания файлов из командной строки, но у них разные подходы и возможности.

Ниже рассмотрим ключевые различия между ними.

Функция cURL Wget
Поддержка параллельных загрузок Нужны дополнительные команды Встроенная
Автоматическая докачка файлов Требуется флаг -C - Встроенная
Работает с API (отправка POST, PUT-запросов и заголовков) По умолчанию Ограниченно
Обход редиректов С помощью флаг -L Встроенный
Поддержка прокси По умолчанию По умолчанию
Встроенный прогресс-бар Нужен флаг -# Отсутствует
Работа в фоновом режиме Не поддерживается Нужен флаг -b
Интеграция в скрипты Да (возвращает код ответа) Ограниченно

Wget и cURL также имеют различия в синтаксисе команд:

  • В cURL команды требуют явного указания флагов: для сохранения файла используется -O, для продолжения загрузки — -C -, а для следования редиректам — -L. По умолчанию cURL выводит данные в терминал, если не указано сохранение в файл.
  • В Wget команды более простые: файл загружается автоматически без дополнительных флагов, продолжение загрузки включается через -c, а редиректы обрабатываются по умолчанию.

Wget изначально ориентирован именно на скачивание файлов, тогда как cURL — на работу с HTTP-запросами и API.

Что касается поддерживаемых протоколов, то cURL имеет огромное преимущество перед Wget.

curl-i-wget.png

Заключение

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

Благодаря возможностям обработки редиректов, ограничения скорости и аутентификации, cURL подходит как для простых загрузок, так и для интеграции с API или массового скачивания данных. Кроме того, он помогает анализировать взаимодействие с сервером, что делает его полезным инструментом для диагностики соединений и тестирования веб-ресурсов. Гибкая настройка параметров позволяет адаптировать cURL под любые задачи и использовать его максимально эффективно.

Комментарии:

0 комментариев