Шпаргалка по curl
curl — утилита командной строки для работы с HTTP/HTTPS и другими протоколами. Незаменима при тестировании API, отладке, автоматизации и работе через прокси.
Основные опции
| Опция | Описание |
|---|---|
-v |
Подробный вывод (заголовки, тело) |
-s |
Тихий режим (без прогресса) |
-S |
Показывать ошибки даже в тихом режиме |
-L |
Следовать редиректам |
-I |
Только заголовки (HEAD-запрос) |
-X <METHOD> |
HTTP-метод |
-H "Header: value" |
Добавить заголовок |
-d "data" |
Данные в теле запроса |
-d @file.json |
Данные из файла |
-F "key=value" |
multipart/form-data |
-o <file> |
Сохранить ответ в файл |
-O |
Сохранить с именем из URL |
-u user:pass |
Basic Auth |
-k |
Игнорировать ошибки SSL |
-x |
Использовать прокси |
HTTP-методы
# GET (по умолчанию)
curl https://httpbin.org/get
# POST с form-data
curl -X POST -d "name=John&age=30" https://httpbin.org/post
# POST с JSON
curl -X POST \
-H "Content-Type: application/json" \
-d '{"name": "John", "age": 30}' \
https://httpbin.org/post
# JSON из файла
curl -X POST \
-H "Content-Type: application/json" \
-d @data.json \
https://httpbin.org/post
# PUT
curl -X PUT -d "updated" https://httpbin.org/put
# DELETE
curl -X DELETE https://httpbin.org/delete
Работа с заголовками и куками
# Только заголовки ответа
curl -I https://example.com
# Добавить заголовок
curl -H "Authorization: Bearer token123" https://api.example.com
# Сохранить куки в файл
curl -c cookies.txt https://example.com/login
# Отправить куки из файла
curl -b cookies.txt https://example.com/dashboard
# Следовать редиректам и сохранить куки
curl -L -c cookies.txt https://example.com/login
SSL и сертификаты
# Игнорировать ошибки SSL (тестовые среды)
curl -k https://self-signed.badssl.com
# Указать свой CA-сертификат
curl --cacert /path/to/ca.crt https://my-internal-api.com
# Клиентская аутентификация (mTLS)
curl --cert client.crt --key client.key https://api.company.com
Прокси (HTTP, HTTPS, SOCKS)
Прокси нужны для обхода ограничений, отладки трафика (Charles, Burp, Fiddler), работы через корпоративные шлюзы или анонимизации.
# HTTP-прокси
curl -x http://proxy.company.com:8080 https://api.example.com
# HTTP-прокси с аутентификацией
curl -x http://proxy.company.com:8080 -U username:password https://api.example.com
# SOCKS5 прокси
curl -x socks5://localhost:9050 https://check.torproject.org
# SOCKS5 с аутентификацией
curl -x socks5://user:pass@proxy:1080 https://example.com
# Игнорировать прокси для локальных адресов
curl --noproxy "localhost,127.0.0.1,*.local" https://internal.local
# Прокси через переменные окружения
export http_proxy=http://proxy:8080
export https_proxy=http://proxy:8080
export no_proxy="localhost,127.0.0.1"
curl https://api.example.com
Загрузка и сохранение файлов
# Сохранить в файл
curl -o output.html https://example.com
# Сохранить с именем из URL
curl -O https://example.com/file.zip
# Несколько файлов
curl -O https://example.com/file1.zip -O https://example.com/file2.zip
# Отправить файл как multipart
curl -F "file=@report.pdf" https://httpbin.org/post
# Загрузка файла через прокси
curl -x http://proxy:8080 -O https://largefile.com/data.bin
# Возобновление прерванной загрузки
curl -C - -O https://example.com/bigfile.iso
Аутентификация
# Basic Auth
curl -u username:password https://api.example.com
# Bearer Token
curl -H "Authorization: Bearer abc123" https://api.example.com/v1/data
# Bearer Token из переменной
TOKEN="abc123"
curl -H "Authorization: Bearer $TOKEN" https://api.example.com
# NTLM (например, SharePoint, Exchange)
curl -u domain\\user:pass --ntlm https://corp.sharepoint.com
Работа с графикой и бинарными данными
# Отправить изображение как бинарные данные
curl -X POST \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpg \
https://api.example.com/upload
# Скачать изображение
curl -o image.png https://example.com/pic.png
# Отправить JSON + файл (multipart/mixed сложнее, лучше -F несколько полей)
curl -F "metadata={\"name\":\"photo\"};type=application/json" \
-F "file=@photo.jpg" \
https://api.example.com/upload
Отладка и лимитирование
# Полный вывод заголовков + тело
curl -v https://api.example.com
# Только заголовки запроса (для отладки)
curl -v -o /dev/null -s https://example.com
# Ограничить скорость (KB/s)
curl --limit-rate 100K -O https://example.com/largefile.zip
# Максимальное время и таймаут подключения
curl --connect-timeout 5 --max-time 30 https://slow-api.com
# Повторы при ошибках
curl --retry 3 --retry-delay 2 --retry-connrefused https://flaky-api.com
Полезные скрипты
Health Check
curl -f -s -o /dev/null https://api.example.com/health
if [ $? -eq 0 ]; then
echo "OK"
else
echo "ERROR"
fi
Измерение времени запроса
curl -w "Total: %{time_total}s | HTTP: %{http_code}\n" -o /dev/null -s https://google.com
Проверка через прокси
curl -x http://proxy:8080 -s -o /dev/null -w "%{http_code}" https://httpbin.org/ip
Парсинг JSON с jq
curl -s https://httpbin.org/json | jq '.slideshow.title'
Мониторинг с отправкой метрик
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" https://api.example.com)
curl -X POST -d "metric=api_status&value=$RESPONSE" https://metrics.example.com
Часто используемые комбинации
| Задача | Команда |
|---|---|
| Скачать файл через прокси | curl -x http://proxy:8080 -O https://site.com/file.zip |
| POST JSON через SOCKS5 | curl -x socks5://127.0.0.1:9050 -H "Content-Type: application/json" -d '{"key":"value"}' https://api.onion |
| Игнорировать SSL + прокси | curl -k -x http://proxy:8080 https://self-signed.local |
| Проверить доступность через корпоративный прокси | curl -f -s -o /dev/null -x http://proxy:8080 -U user:pass URL && echo OK |
| Отправить файл | curl -F "file=@photo.jpg" URL |
| Узнать свой IP через прокси | curl -x http://proxy:8080 ifconfig.me |
| Загрузить бинарный файл как тело запроса | curl -X POST --data-binary @data.bin URL |
Полезные советы
- Для отладки всегда используйте
-v. - Тестируйте запросы на
https://httpbin.org— он показывает, что curl отправил на самом деле. - Для JSON всегда указывайте
Content-Type: application/json, иначе сервер может не распарсить тело. - Используйте
jqдля парсинга JSON-ответов:curl -s URL | jq . - Для правильной обработки переносов строк используйте
--data-binaryвместо-dпри отправке скриптов или бинарных данных. - Прокси-отладка:
curl -x http://127.0.0.1:8080 -v https://example.com(если у вас локально запущен Charles/Burp на порту 8080). - В корпоративной среде часто требуется
--noproxyдля локальных или внутрисетевых адресов. - Для анонимности через Tor используйте
curl -x socks5h://127.0.0.1:9050—socks5hзаставит curl резолвить DNS через прокси.