Что такое curl?
curl — это сокращение от 'Client URL', утилита командной строки, которая использует синтаксис URL для отправки/получения данных. Она используется в широком спектре областей, включая веб-разработку, тестирование API, автоматизацию CI/CD и устранение неполадок в операциях.
Ключевые особенности
- Разнообразие протоколов: HTTP/HTTPS, FTP/FTPS, SFTP, LDAP, SMTP/SMTPS и т.д. (зависит от опций сборки).
- Управление HTTP: Детальный контроль методов, заголовков, файлов cookie, сжатия, HTTP/2, перенаправлений, таймаутов, повторных попыток и т.д.
- Загрузка/Скачивание: Скачивание файлов (-o/-O), возобновление прерванной загрузки (-C -), загрузка форм (-F), загрузка одного файла (-T).
- Безопасность: Проверка сертификатов TLS (включена по умолчанию), указание доверенных корневых сертификатов (--cacert), клиентские сертификаты (--cert/--key).
- Пригодность для автоматизации: Тихий вывод (-s), завершение при ошибке (-f), форматированный вывод (-w), подходит для скриптов.
Основные опции (Shell)
В основном требуется URL-адрес запроса. Несколько URL-адресов можно перечислить через пробел или прочитать из файла (@file).
1. Базовый запрос и скачивание
2. Методы HTTP и передача данных
3. Заголовки, аутентификация, файлы cookie
4. Управление выводом/надежность
5. Безопасность/TLS и прокси/диагностика
6. Протокол/Версия
7. Справка/Версия
Сгенерированная команда:
Комбинируйте команды.
Описание:
`curl` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры сценариев использования (Shell)
Здесь собраны часто используемые шаблоны запросов.
Вывод содержимого веб-страницы
curl https://example.com
Базовый GET-запрос.
Скачивание файла (с отслеживанием перенаправлений)
curl -O -L https://wordpress.org/latest.zip
-O исходное имя файла, -L отслеживание перенаправлений.
JSON GET + красивый вывод
curl -s https://api.github.com/users/google | jq
Парсинг/улучшение читаемости с помощью jq.
JSON POST
curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' https://api.example.com/users
Указать заголовки и тело запроса.
Загрузка файла формы (multipart)
curl -F "upload_file=@./my-image.png" https://example.com/upload
Имя поля=upload_file, путь к файлу указывается с помощью @.
Аутентификация с токеном Bearer
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/me
Использование заголовка Authorization.
Проверить только заголовки ответа
curl -I https://google.com
Полезно для диагностики состояния сервиса/кэша.
Завершение с ненулевым кодом при ошибке + тихо
curl -sSf https://example.com/health
Комбинация -sS -f: подходит для скриптов.
Таймаут + повторная попытка
curl --connect-timeout 5 --max-time 20 --retry 3 --retry-all-errors https://example.com/api
Реагирование на нестабильную сеть.
Тестирование с определенным IP (--resolve)
curl --resolve 'api.example.com:443:203.0.113.10' https://api.example.com/status
Тестирование обхода DNS (с сохранением SNI).
Установка
В большинстве случаев поставляется по умолчанию, в противном случае устанавливается через пакетный менеджер.
Debian/Ubuntu
sudo apt update && sudo apt install -y curl
RHEL/CentOS/Fedora
sudo dnf install -y curl
Arch Linux
sudo pacman -S --needed curl
Советы и примечания
Полезные советы
- curl vs wget: wget лучше подходит для больших/рекурсивных загрузок, curl — для взаимодействия с API/детального контроля.
- Кавычки: Рекомендуется заключать JSON/специальные символы в -d/-H в одинарные кавычки.
- Сжатый ответ: Использование --compressed позволяет автоматически распаковывать сжатые данные, если сервер поддерживает это, что уменьшает объем передаваемых данных.
- Прокси: HTTP-прокси устанавливается с -x, SOCKS5 — с --socks5.
- Внимание к безопасности (-k): -k/--insecure использовать только для разработки/тестирования. В продакшене рекомендуется настраивать доверенные корневые сертификаты (--cacert).