Повний посібник зі скачування файлів за допомогою 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:password@proxy.example.com: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 Коментаріїв