Повний посібник: завантаження файлів за допомогою cURL

Короткий зміст статті

cURL (Client URL) — це потужний інструмент командного рядка та бібліотека, призначені для передачі даних через мережі за допомогою різних протоколів, включаючи HTTP, HTTPS, FTP тощо. cURL, попередньо встановлений на більшості систем на базі Unix і широко доступний на різних платформах, став незамінним рішенням для завантаження файлів у серверних середовищах та автоматизованих робочих процесах.

Коли вам потрібно ефективно завантажувати файли з командного рядка, cURL забезпечує неперевершену гнучкість і надійність. Цей вичерпний посібник допоможе вам дізнатися все, що потрібно знати про завантаження файлів за допомогою cURL, від основних операцій до просунутих технік. Незалежно від того, чи працюєте ви з API, налаштовуєте автоматизовані скрипти чи керуєте роботою серверів, оволодіння навичками завантаження файлів за допомогою cURL буде неоціненним для автоматизації робочих процесів та управління даними.

Але не забувайте перевіряти джерело та цілісність файлів перед завантаженням. Завантажуйте файли тільки з надійних джерел і, за необхідності, перевіряйте їх на наявність шкідливого програмного забезпечення.

Базове отримання файлів за допомогою cURL

Найпростіший спосіб завантажити та переглянути вміст файлу — це завантажити файл за допомогою curl із стандартними налаштуваннями cURL, які відображають отримані дані безпосередньо у вашому терміналі. Коли вам потрібно завантажити файл за допомогою curl, цей базовий підхід дозволяє швидко перевірити вміст, не зберігаючи його спочатку на диск, що ідеально підходить для тестування кінцевих точок або попереднього перегляду вмісту файлу перед повним завантаженням.

bash

curl https://example.com/sample.txt

Ця команда завантажує файл і виводить його вміст на stdout (стандартний вивід). Ви побачите текст файлу, відображений у вікні терміналу.

Для перегляду заголовків HTTP разом із вмістом:

bash

curl -i https://example.com/sample.txt

Прапор -i включає заголовки HTTP-відповіді, які можуть допомогти вам зрозуміти відповідь сервера та метадані файлу.

Примітка: під час завантаження великих файлів таким чином весь вміст буде прокручуватися у вашому терміналі, що не є практичним для бінарних файлів або великих текстових файлів.

Збереження віддалених файлів у вашій локальній системі

Щоб зберегти завантажені файли у вашій локальній файловій системі замість їхнього відображення, використовуйте прапор -o (вихід):

bash

curl -o downloaded_file.txt https://example.com/sample.txt

Це завантажує віддалений файл і зберігає його локально як «downloaded_file.txt». Прапор -o вимагає вказати точне ім'я файлу, яке ви хочете використовувати.

Для завантаження декількох файлів із конкретними іменами:

curl -o file1.txt https://example.com/data1.txt \

-o file2.txt https://example.com/data2.txt

Примітка: Якщо вказаний файл вже існує, cURL перезапише його без попередження.

Збереження оригінальних імен файлів

Якщо ви хочете зберегти оригінальне ім'я файлу з URL-адреси, використовуйте прапор -O (велика літера O):

bash

curl -O https://example.com/important-document.pdf

Це збереже файл з його оригінальною назвою «important-document.pdf» у вашому поточному каталозі. Цей підхід особливо корисний при роботі з файлами, які мають значущі назви в своїх URL-адресах.

Для завантаження декількох файлів із збереженням їхніх назв:

bash

curl -O https://example.com/file1.zip \

-O https://example.com/file2.tar.gz \

-O https://example.com/file3.pdf

Обробка URL-перенаправлення

Багато веб-серверів використовують перенаправлення для вказівки фактичного розташування файлу. За замовчуванням cURL не слідує перенаправленням, що може призвести до завантаження сторінок перенаправлення замість фактичних файлів.

bash

curl -L -O https://example.com/download-link

Прапор -L вказує cURL автоматично слідувати переадресаціям. Це необхідно при завантаженні з таких сервісів, як GitHub releases, посилання на хмарні сховища або будь-які сервіси скорочення URL-адрес.

Ви можете обмежити кількість переадресацій, щоб запобігти нескінченним циклам переадресації:

bash

curl -L --max-redirs 5 -O https://example.com/download-link

Примітка: Деякі служби завантаження використовують кілька переадресацій, тому дозвіл на 3-5 переадресацій є загалом безпечним і достатнім.

Завантаження файлів з автентифікацією

Багато серверів вимагають автентифікації перед дозволом завантаження файлів. cURL підтримує різні методи автентифікації:

#1. Базова автентифікація

bash

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

#2. Запит пароля (більш безпечний)

bash

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

Це запропонує вам ввести пароль, запобігаючи його збереженню в історії команд.

#3. Використання API-ключів

bash

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

#4. Кастомні заголовки

bash

curl -H "X-API-Key: your_api_key" \

-H "User-Agent: MyApp/1.0" \

-O https://example.com/api/download

Управління тайм-аутами, повторними спробами та відновленням завантаження

#1. Налаштування тайм-аутів з'єднання та передачі даних

bash

curl --connect-timeout 10 --max-time 300 -O https://example.com/largefile.zip

--connect-timeout: Maximum time for connection establishment

--max-time: Maximum total time for the entire operation

#2. Повторити невдалі завантаження

bash

curl --retry 3 --retry-delay 5 -O https://example.com/unstable-source.tar.gz

#3. Відновлення перерваного завантаження

bash

curl -C - -O https://example.com/large-file.iso

Прапорець -C вказує cURL автоматично визначати, де продовжувати завантаження, на основі існуючого часткового файлу.

Примітка: Функція продовження працює тільки в тому випадку, якщо сервер підтримує запити HTTP range.

Автоматизація завантажень за допомогою скриптів оболонки

Створіть потужні скрипти завантаження для пакетних операцій:

bash

#!/bin/bash

# Download multiple files from a list

urls=(

"https://example.com/file1.pdf"

"https://example.com/file2.zip"

"https://example.com/file3.tar.gz"

)

for url in "$ { urls[@] } "; do

echo "Downloading: $url"

curl -L --retry 3 -O "$url"

if [ $? -eq 0 ]; then

echo "✓ Successfully downloaded: $(basename "$url")"

else

echo "✗ Failed to download: $url"

fi

done

Скрипт для моніторингу прогресу

bash

#!/bin/bash

download_with_progress() { 

local url="$1"

local filename="$2"

curl -L --retry 3 \

--progress-bar \

-o "$filename" \

"$url"

}

download_with_progress "https://example.com/large-file.zip" "downloaded.zip"

Усунення типових проблем із завантаженням

Номер 1. Проблеми із сертифікатом SSL

bash

# Skip SSL verification (use cautiously)

curl -k -O https://self-signed-site.com/file.zip

# Specify custom CA certificate

curl --cacert /path/to/certificate.pem -O https://example.com/file.zip

Номер 2. Усунення проблем із підключенням

bash

# Verbose output for troubleshooting

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

# Show only headers

curl -I https://example.com/file.zip

# Test connectivity without downloading

curl --head https://example.com/file.zip

Номер 3. Обробка обмежень швидкості

bash

# Add delays between requests

curl --limit-rate 100k -O https://example.com/file.zip

# Custom user agent to avoid blocking

curl -A "Mozilla/5.0 (compatible; MyDownloader/1.0)" -O https://example.com/file.zip

Номер 4. Поширені помилки та їх вирішення

«curl: (6) Не вдалося визначити хост» ("curl: (6) Could not resolve host")

  • Перевірте підключення до Інтернету
  • Перевірте правильність URL-адреси
  • Перевірте налаштування DNS

«curl: (7) Не вдалося підключитися» ("curl: (7) Failed to connect")

  • Перевірте доступність сервера
  • Перевірте налаштування брандмауера
  • Спробуйте використовувати інший порт, якщо це можливо

«curl: (28) Операція завершилася через перевищення часу очікування» ("curl: (28) Operation timed out")

  • Збільште значення часу очікування
  • Перевірте стабільність мережі
  • Спробуйте завантажити в години найменшого навантаження

Використання wget як альтернативи

Хоча cURL чудово підходить для більшості завдань, wget має деякі переваги в конкретних ситуаціях:

Основні функції wget Завантаження

bash

wget https://example.com/file.zip

Рекурсивне завантаження каталогів

bash

wget -r -np -nd https://example.com/files/

Продовжити часткове завантаження

bash

wget -c https://example.com/large-file.iso

Основні відмінності

Перевірка та цілісність файлів

Для виробничих середовищ дуже важливо переконатися, що завантажені файли є повними та не пошкодженими. cURL надає кілька механізмів для перевірки. Для перевірки контрольної суми можна поєднати завантаження з перевіркою хеш-коду:

bash

# Download and verify MD5 checksum

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

curl -s https://example.com/file.zip.md5 | md5sum -c

# One-liner with automatic verification

curl -O https://example.com/file.zip && \

curl -s https://example.com/file.zip.sha256 | sha256sum -c

Щоб перевірити розміри файлів і виявити часткові завантаження, використовуйте опцію --write-out для збору інформації про передачу:

bash

#!/bin/bash

expected_size=1048576 # Expected size in bytes

actual_size=$(curl -sI https://example.com/file.zip | grep -i content-length | awk ' { print $2 } ' | tr -d '\r')

if [ "$actual_size" -eq "$expected_size" ]; then

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

downloaded_size=$(stat -f%z file.zip 2>/dev/null || stat -c%s file.zip)

if [ "$downloaded_size" -eq "$expected_size" ]; then

echo "✓ Download verified: Complete and correct size"

else

echo "✗ Warning: Downloaded size mismatch"

fi

fi

Для перевірки типу вмісту переконайтеся, що ви отримуєте очікуваний формат файлу:

bash

content_type=$(curl -sI https://example.com/file.pdf | grep -i content-type | awk ' { print $2 } ' | tr -d '\r')

if ; then

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

else

echo "Error: Expected PDF, got $content_type"

fi

Оптимізація продуктивності

Для максимального підвищення ефективності завантаження використовуються кілька стратегій. Для паралельного завантаження поєднайте cURL із GNU parallel або xargs:

bash

# Download multiple files in parallel (4 simultaneous connections)

echo -e "https://example.com/file1.zip\nhttps://example.com/file2.zip\nhttps://example.com/file3.zip" | \

parallel -j4 curl -L --retry 3 -O { } 

# Using xargs for parallel downloads

cat urls.txt | xargs -n1 -P4 curl -L --retry 3 -O

Для управління пропускною здатністю та оптимізації з'єднання:

bash

# Limit bandwidth to avoid overwhelming network

curl --limit-rate 1000k -O https://example.com/largefile.iso

# Enable compression for text files

curl --compressed -O https://example.com/data.json

# Optimize for multiple downloads with keep-alive

curl --keepalive-time 60 --keepalive \

-O https://example.com/file1.txt \

-O https://example.com/file2.txt

Для повторного використання з'єднання в скриптах використовуйте один процес cURL для декількох завантажень:

bash

#!/bin/bash

# Efficient batch downloading with connection reuse

 { 

echo "url = https://example.com/file1.pdf"

echo "output = file1.pdf"

echo "url = https://example.com/file2.zip" 

echo "output = file2.zip"

echo "url = https://example.com/file3.tar.gz"

echo "output = file3.tar.gz"

} | curl --parallel --parallel-max 3 --config -

Для моніторингу та оптимізації продуктивності використовуйте детальну інформацію про час:

bash

curl -w "Download completed in % { time_total } s\nAverage speed: % { speed_download } bytes/s\nSize: % { size_download } bytes\n" \

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

Ці методи можуть значно покращити швидкість завантаження, особливо при роботі з великою кількістю файлів або ненадійними з'єднаннями.

Кращі практики та остаточні поради

При завантаженні файлів надавайте пріоритет безпеці, використовуючи HTTPS-з'єднання, коли це можливо. Завжди перевіряйте цілісність файлів за допомогою контрольних сум, наданих джерелом, і стежте за ходом завантаження великих файлів за допомогою індикаторів прогресу. Встановіть відповідні часові обмеження, щоб запобігти безкінечному зависанню з'єднань, і впровадьте механізми повторних спроб для роботи в ненадійних мережевих умовах. З міркувань безпеки зберігайте облікові дані в безпечному місці і уникайте вбудовування паролів безпосередньо в скрипти. Перед розгортанням будь-яких автоматизованих процесів завантаження ретельно протестуйте їх у середовищах розробки, щоб переконатися, що вони працюють як очікується і правильно обробляють крайні випадки.

Універсальність cURL робить його незамінним інструментом для системних адміністраторів, розробників і всіх, хто працює з автоматизованою передачею файлів. Опануйте ці техніки, і ви будете добре підготовлені для ефективної та безпечної обробки будь-яких сценаріїв завантаження.

Ми сподіваємося, що цей гайд дав вам можливість впевнено та ефективно обробляти завантаження файлів. Приємного завантаження!

Залиште свої відгуки

Поділіться своїми думками та допоможіть нам покращитися! Ваш відгук важливий для нас.

Завантажте своє фото