Нажмите на команду или пример, чтобы скопировать его.
curl - это мощная утилита командной строки для передачи данных между серверами с
использованием различных протоколов: HTTP, HTTPS, FTP, SFTP, SCP, SMTP и многих других. Часто
используется для тестирования API, загрузки файлов, отладки веб-запросов и автоматизации задач.
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 - сохраняет файл с оригинальным именем.
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 - читает и отправляет куки из файла.
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 - прокси с
аутентификацией.
curl -s -H "Authorization: Bearer token123" \
-H "Accept: application/json" \
"https://api.github.com/user"
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) - создавать директории при сохранении.
Пример:
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'