junior
Как выполнять HTTP-запросы из командной строки с помощью curl и wget?
curl — универсальный инструмент командной строки для выполнения HTTP-запросов (и других протоколов). wget — специализированный инструмент для скачивания файлов. Для Java-разработчика curl — основной инструмент тестирования REST API без графических клиентов.
curl — базовые запросы
Пример
# GET-запрос
curl https://api.example.com/users
# Сохранить ответ в файл
curl -o response.json https://api.example.com/users
# Показать заголовки ответа
curl -I https://example.com # Только заголовки (HEAD)
curl -i https://example.com # Заголовки + тело
# Verbose (подробный вывод — полезно для отладки)
curl -v https://example.com
# Тихий режим (без прогресс-бара)
curl -s https://api.example.com/users
Разные HTTP-методы
Пример
# POST с JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@example.com"}'
# PUT
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Jane"}'
# DELETE
curl -X DELETE https://api.example.com/users/1
# PATCH
curl -X PATCH https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"email": "new@example.com"}'
Заголовки и аутентификация
Пример
# Произвольные заголовки
curl -H "Authorization: Bearer eyJhbGciOi..." \
-H "Accept: application/json" \
https://api.example.com/data
# Basic Auth
curl -u username:password https://api.example.com/data
# Отправка данных формы
curl -X POST -d "username=admin&password=secret" https://example.com/login
# Загрузка файла (multipart form)
curl -F "file=@report.pdf" https://example.com/upload
Полезные флаги curl
Пример
curl -L https://example.com # Следовать редиректам (-L = location)
curl -k https://self-signed.example # Игнорировать ошибки сертификата
curl -w "%{http_code}" -s -o /dev/null https://example.com # Только HTTP-код ответа
curl --connect-timeout 5 --max-time 30 https://example.com # Таймауты
curl --retry 3 https://api.example.com/data # Повторные попытки
wget — скачивание файлов
Пример
wget https://example.com/file.zip # Скачать файл
wget -O output.zip https://example.com/file.zip # Указать имя выходного файла
wget -b https://example.com/large-file.iso # Скачать в фоне
wget -c https://example.com/large-file.iso # Продолжить прерванную загрузку
wget -r -l 2 https://docs.example.com/ # Рекурсивное скачивание (зеркало сайта)
wget --user=admin --password=secret https://example.com/data # С аутентификацией
Сравнение curl и wget
| Характеристика | curl | wget |
|---|---|---|
| Протоколы | HTTP, HTTPS, FTP, SCP, SFTP, LDAP и др. | HTTP, HTTPS, FTP |
| REST API | Полная поддержка (методы, заголовки) | Только GET |
| Рекурсивное скачивание | Нет | Да (-r) |
| Возобновление загрузки | -C - |
-c |
| Вывод | В stdout по умолчанию | В файл по умолчанию |
Практические примеры для Java-разработчика
Пример
# Проверка health endpoint Spring Boot
curl -s http://localhost:8080/actuator/health | jq .
# Тестирование REST API
curl -s -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"name":"Test","email":"test@test.com"}' | jq .
# Мониторинг: проверить код ответа
STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/actuator/health)
if [ "$STATUS" != "200" ]; then
echo "Service is down! Status: $STATUS"
fi
На собеседовании: уверенное владение
curlс различными HTTP-методами и заголовками — обязательный навык. Покажите, что можете быстро протестировать REST endpoint без Postman. Знание-s -o /dev/null -w "%{http_code}"для получения только кода ответа — отличный маркер практического опыта.