Кладовочка

О разном, чтобы было под рукой онлайн

Шпаргалка по 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 через прокси.