- Home »

Как использовать wget для загрузки файлов и работы с REST API
Однажды в пятницу в 18:00 вас может застать необходимость скачать сотни файлов с сервера, отправить POST-запрос к API или настроить автоматическую загрузку архивов. И если вы думаете, что для этого нужен сложный скрипт на Python или специализированный инструмент, то вы ошибаетесь. Старый добрый wget — это швейцарский нож для работы с HTTP/HTTPS, который уже более 25 лет помогает админам и разработчикам решать подобные задачи.
Сегодня разберём, как использовать wget для загрузки файлов и работы с REST API. Это не просто статья с парой примеров — это полноценное руководство с реальными кейсами, которые пригодятся в ежедневной работе с серверами. Покажу, как избежать типичных ошибок, сделать процесс автоматизированным и даже расскажу несколько трюков, которые не все знают.
Как работает wget и почему он до сих пор актуален
wget (Web Get) — это утилита командной строки для загрузки контента по HTTP, HTTPS и FTP. В отличие от браузера, wget работает без графического интерфейса и отлично подходит для автоматизации. Главная фишка — он умеет продолжать прерванные загрузки, рекурсивно скачивать целые сайты и отправлять любые HTTP-запросы.
Принцип работы простой: wget создаёт TCP-соединение, отправляет HTTP-запрос и получает ответ. Но дьявол в деталях — он умеет обрабатывать редиректы, cookies, аутентификацию и множество других нюансов HTTP-протокола.
Установка и базовая настройка
В большинстве Linux-дистрибутивов wget уже предустановлен. Если нет — установите:
# Ubuntu/Debian
sudo apt install wget
# CentOS/RHEL
sudo yum install wget
# или для новых версий
sudo dnf install wget
# Проверяем версию
wget --version
Для работы с REST API понадобится также jq для парсинга JSON:
sudo apt install jq
Основные команды и параметры
Начнём с базовых операций, которые покрывают 80% задач:
# Простая загрузка файла
wget https://example.com/file.zip
# Сохранить под другим именем
wget -O myfile.zip https://example.com/file.zip
# Продолжить прерванную загрузку
wget -c https://example.com/largefile.iso
# Скачать в фоне
wget -b https://example.com/file.zip
# Ограничить скорость (чтобы не забить канал)
wget --limit-rate=200k https://example.com/file.zip
# Скачать несколько файлов из списка
wget -i urls.txt
Работа с REST API: GET, POST, PUT, DELETE
Теперь самое интересное. wget может работать с REST API почти как curl, но с некоторыми особенностями:
GET-запросы
# Простой GET-запрос
wget -qO- https://api.github.com/users/octocat
# С заголовками
wget --header="Authorization: Bearer YOUR_TOKEN" \
--header="Accept: application/json" \
-qO- https://api.example.com/data
# Сохранить ответ в файл
wget -O response.json https://api.example.com/data
POST-запросы
# POST с данными
wget --post-data='{"name":"test","value":"123"}' \
--header="Content-Type: application/json" \
-qO- https://api.example.com/create
# POST из файла
wget --post-file=data.json \
--header="Content-Type: application/json" \
-qO- https://api.example.com/create
# POST с формой
wget --post-data='username=admin&password=secret' \
-qO- https://example.com/login
PUT и DELETE
Тут wget показывает свой возраст — он не поддерживает PUT и DELETE нативно, но есть обходной путь:
# PUT через --method (в новых версиях)
wget --method=PUT \
--body-data='{"id":123,"status":"updated"}' \
--header="Content-Type: application/json" \
-qO- https://api.example.com/resource/123
# DELETE
wget --method=DELETE \
--header="Authorization: Bearer YOUR_TOKEN" \
-qO- https://api.example.com/resource/123
Продвинутые техники и трюки
Работа с cookies и сессиями
# Сохранить cookies
wget --save-cookies=cookies.txt \
--post-data='username=admin&password=secret' \
https://example.com/login
# Использовать сохранённые cookies
wget --load-cookies=cookies.txt \
https://example.com/protected-area
Обход блокировок и маскировка
# Притвориться браузером
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
https://example.com/file.zip
# Добавить Referer
wget --referer="https://example.com/page1" \
https://example.com/protected-file.zip
# Случайные задержки между запросами
wget --random-wait --wait=1 \
-i urls.txt
Рекурсивная загрузка
# Скачать весь сайт
wget -r -np -k -E https://example.com/
# Ограничить глубину
wget -r -l 2 https://example.com/
# Скачать только определённые типы файлов
wget -r -A "*.pdf,*.doc" https://example.com/documents/
Реальные кейсы использования
Кейс 1: Мониторинг API
Создадим скрипт для проверки доступности API:
#!/bin/bash
API_URL="https://api.example.com/health"
EXPECTED_STATUS="200"
response=$(wget -qO- --server-response "$API_URL" 2>&1)
status=$(echo "$response" | grep "HTTP/" | tail -1 | awk '{print $2}')
if [ "$status" = "$EXPECTED_STATUS" ]; then
echo "API is UP"
else
echo "API is DOWN, status: $status"
# Отправить уведомление
fi
Кейс 2: Массовая загрузка с API
#!/bin/bash
# Получаем список файлов через API
wget -qO- --header="Authorization: Bearer $TOKEN" \
"https://api.example.com/files" | \
jq -r '.files[].download_url' | \
while read url; do
filename=$(basename "$url")
echo "Downloading $filename..."
wget -c "$url" -O "downloads/$filename"
done
Кейс 3: Автоматическая отправка логов
#!/bin/bash
# Архивируем логи и отправляем через API
tar -czf logs.tar.gz /var/log/application/
base64 logs.tar.gz > logs.b64
wget --post-file=logs.b64 \
--header="Content-Type: application/octet-stream" \
--header="Authorization: Bearer $TOKEN" \
-qO- https://api.logging-service.com/upload
Сравнение с альтернативами
Функция | wget | curl | httpie |
---|---|---|---|
Простота использования | Средняя | Сложная | Высокая |
Рекурсивная загрузка | Да | Нет | Нет |
Продолжение загрузки | Да | Да | Нет |
HTTP методы | GET, POST, PUT, DELETE | Все | Все |
JSON парсинг | Нет | Нет | Да |
Размер установки | Маленький | Маленький | Большой |
Обработка ошибок и отладка
Несколько полезных опций для диагностики проблем:
# Подробный вывод
wget -v https://example.com/file.zip
# Отладочная информация
wget -d https://example.com/file.zip
# Показать только заголовки
wget -S --spider https://example.com/file.zip
# Игнорировать SSL-ошибки (осторожно!)
wget --no-check-certificate https://example.com/file.zip
# Настроить таймауты
wget --timeout=30 --tries=3 https://example.com/file.zip
Автоматизация и интеграция
wget отлично работает в связке с другими инструментами:
# Интеграция с systemd для периодических задач
cat > /etc/systemd/system/api-backup.service << 'EOF'
[Unit]
Description=API Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/api-backup.sh
EOF
# Создаём таймер
cat > /etc/systemd/system/api-backup.timer << 'EOF'
[Unit]
Description=Run API backup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
Для более сложных задач можно комбинировать wget с:
- jq — для парсинга JSON ответов
- xmlstarlet — для работы с XML
- parallel — для параллельной загрузки
- inotify-tools — для мониторинга файловой системы
Нестандартные способы использования
Несколько интересных трюков, которые могут пригодиться:
Проверка доступности сайта
# Быстрая проверка без загрузки контента
wget --spider -q https://example.com/
echo $? # 0 = успех, другое = ошибка
Создание зеркала API документации
# Скачать OpenAPI спецификацию и создать локальную документацию
wget -O api-spec.json https://api.example.com/openapi.json
# Затем сгенерировать HTML с помощью swagger-codegen
Тестирование производительности
# Множественные параллельные запросы
for i in {1..10}; do
wget -qO- https://api.example.com/test &
done
wait
Безопасность и лучшие практики
Важные моменты, которые нужно учитывать:
- Не передавайте токены в командной строке — используйте переменные окружения
- Проверяйте SSL-сертификаты — не используйте --no-check-certificate в продакшене
- Ограничивайте скорость — не забивайте канал и не создавайте нагрузку на сервер
- Логируйте операции — особенно важно для API-запросов
# Безопасное использование токена
export API_TOKEN="your-secret-token"
wget --header="Authorization: Bearer $API_TOKEN" \
-qO- https://api.example.com/data
# Логирование
wget -o download.log -O response.json https://api.example.com/data
Производительность и оптимизация
Для высоконагруженных сценариев:
# Увеличить количество одновременных соединений
wget --max-redirect=5 --timeout=30 -t 3 \
--dns-timeout=10 --connect-timeout=10 \
https://example.com/file.zip
# Использовать IPv4 для ускорения (если IPv6 медленный)
wget -4 https://example.com/file.zip
Развёртывание на VPS
Если вы планируете использовать wget для серьёзных задач автоматизации, рекомендую развернуть решение на VPS или выделенном сервере. Это даст вам полный контроль над окружением и возможность настроить все необходимые cron-задачи.
Заключение и рекомендации
wget — это мощный инструмент, который заслуживает места в арсенале каждого системного администратора. Он особенно хорош для:
- Автоматизации загрузок — когда нужно скачивать файлы по расписанию
- Работы с простыми API — для мониторинга и базовых операций
- Создания бэкапов — через API облачных сервисов
- Рекурсивной загрузки — когда curl не справляется
Однако для сложной работы с REST API всё же лучше использовать curl или специализированные инструменты. wget показывает свои лучшие качества в простых, но объёмных задачах.
Помните: хороший админ знает множество инструментов и выбирает подходящий для конкретной задачи. wget — это надёжная рабочая лошадка, которая не подведёт в критический момент.
Полезные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.