Что такое curl
Что такое curl?
curl - это мощная утилита командной строки для передачи данных между серверами с
использованием различных протоколов: HTTP, HTTPS, FTP, SFTP, SCP, SMTP и многих других. Часто
используется для тестирования API, загрузки файлов, отладки веб-запросов и автоматизации задач.
Установка curl
-
Windows: уже встроен в Windows 10+ (в PowerShell и CMD).
Linux/macOS: обычно предустановлен. Если нет - установите через пакетный менеджер:
-
sudo apt install curl# Debian/Ubuntu -
sudo dnf install curl# Fedora -
brew install curl# macOS
Базовый синтаксис
curl [опции] [URL]
Простые запросы
-
curl http://example.com- получает содержимое страницы. -
curl -I http://example.com- показывает только HTTP-заголовки (HEAD-запрос). -
curl -L http://bit.ly/123- следует за редиректами (301/302). -
curl -v http://example.com- выводит подробную информацию (verbose), включая заголовки и этапы соединения. -
curl -s http://example.com- тихий режим (без индикатора прогресса). -
curl -o page.html http://example.com- сохраняет ответ в файлpage.html. -
curl -O http://example.com/file.zip- сохраняет файл с оригинальным именем.
HTTP-методы
-
curl -X GET http://api.site.com/users- явное указание метода GET (по умолчанию). -
curl -X POST http://api.site.com/users- POST-запрос. -
curl -X PUT http://api.site.com/users/1- обновление ресурса. -
curl -X DELETE http://api.site.com/users/1- удаление.
Отправка данных
Для POST/PUT запросов:
-
curl -d "name=Иван&age=25" http://api.site.com/users- отправка данных в форматеapplication/x-www-form-urlencoded. -
curl -H "Content-Type: application/json" -d "{\"name\":\"Иван\"}" http://api.site.com/users- отправка JSON. -
curl -F "file=@photo.jpg" http://site.com/upload- отправка файла черезmultipart/form-data(как форма). -
curl --data-binary @file.txt http://site.com/data- отправка файла "как есть", без преобразований (полезно для бинарных данных).
Работа с заголовками
-
curl -H "Authorization: Bearer abc123" http://api.site.com/data- добавление авторизации. -
curl -H "User-Agent: Mozilla/5.0" http://site.com- подмена User-Agent. -
curl -H "Accept: application/json" http://api.site.com- указание желаемого формата ответа. -
curl -H "X-API-Key: 12345" http://api.site.com- передача кастомного заголовка. -
curl --compressed http://site.com- автоматически распаковывает ответы сgzip,deflate.
Аутентификация
-
curl -u username:password http://site.com/secure- Basic Auth. -
curl --ntlm -u user:pass http://intranet/site- NTLM-аутентификация (для Windows-серверов). -
curl --digest -u user:pass http://site.com- Digest Auth. -
curl --key client.key --cert client.crt https://api.site.com- клиентский SSL-сертификат.
Работа с куками
-
curl -b "sessionid=abc123" http://site.com- отправка куки вручную. -
curl -c cookies.txt http://site.com- сохраняет куки в файл после запроса. -
curl -b cookies.txt http://site.com- читает и отправляет куки из файла.
HTTPS и SSL
-
curl https://site.com- работает "из коробки", если сертификат валиден. -
curl -k https://self-signed.site- игнорирует ошибки SSL (небезопасно!) -
curl --cacert ca.pem https://site.com- использует пользовательский CA-сертификат. -
curl --insecure https://site.com- то же, что-k.
Таймауты и повторы
-
curl --max-time 30 http://site.com- максимальное время выполнения (в секундах). -
curl --connect-timeout 10 http://site.com- таймаут подключения. -
curl --retry 3 http://site.com- повторить до 3 раз при ошибке. -
curl --retry-delay 5 http://site.com- задержка между попытками.
Прокси
-
curl -x http://proxy:8080 http://site.com- использование HTTP-прокси. -
curl --socks5 127.0.0.1:1080 http://site.com- SOCKS5 прокси. -
curl -x http://user:pass@proxy:8080 http://site.com- прокси с аутентификацией.
Пример: GET-запрос к API
curl -s -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
"https://api.github.com/user"
Пример: POST с JSON
curl -X POST \
-H "Content-Type: application/json" \
-d "{\"title\":\"Новая задача\",\"done\":false}" \
https://api.site.com/tasks
Пример: Загрузка файла
curl -F "upload=@report.pdf" \
-H "Authorization: Bearer xyz" \
https://site.com/upload
Пример: Сохранение с проверкой кода ответа
curl -f -o backup.sql "http://db.site.com/dump.sql" \
|| echo "Ошибка загрузки!"
Флаг -f (fail) заставляет curl возвращать ненулевой код при HTTP-ошибках (4xx/5xx).
Пример: Скрипт с логированием
#!/bin/bash
echo "[$(date)] Запуск..." >> curl.log
curl -s -o /dev/null -w "%{http_code}" http://site.com >> curl.log 2>&1
echo "" >> curl.log
Полезные опции
-
--silent (-s)- без индикатора прогресса. -
--write-out (-w)- вывод дополнительной информации (время, код ответа и т.д.). Пример:-w "Time: %{time_total}s\n" -
--user-agent (-A)- короткий способ задать User-Agent:-A "MyBot/1.0" -
--location (-L)- следовать за редиректами. -
--fail (-f)- не выводить тело при HTTP-ошибках и вернуть код ошибки. -
--output (-o)- сохранить в файл. -
--create-dirs (-O)- создавать директории при сохранении.
Формат вывода статистики (-w)
Пример:
curl -w "DNS: %{time_namelookup}s | Connect: %{time_connect}s | Total: %{time_total}s\n" \
-o /dev/null -s http://example.com
Полезные переменные:
%{http_code}- HTTP-статус%{time_total}- общее время%{time_namelookup}- время DNS%{size_download}- размер скачанного (в байтах)%{speed_download}- скорость
Безопасность и советы
- Не используйте
-kв продакшене - это уязвимость. - Храните токены в переменных окружения, а не в командах:
curl -H "Authorization: Bearer $TOKEN" ... - Тестируйте запросы в
http://httpbin.org- отличный инструмент для отладки. - Для сложных сценариев лучше использовать
httpieилиPostman, ноcurlнезаменим в скриптах. - Используйте
jqдля парсинга JSON:curl ... | jq .data.id
Совет: Создайте алиасы в .bashrc или
.zshrc:
alias c='curl -s'
alias cj='curl -s -H "Accept: application/json"'
alias cu='curl -u'