Шпаргалка по curl: 40+ примеров команд для HTTP и API
Вы зашли по SSH через три промежуточных хоста на staging-сервер, API возвращает что-то не то, а единственный установленный HTTP-клиент — это curl. Или читаете CI-скрипт, который проверяет работоспособность сервиса, и хотите понять, что на самом деле делает -fsS. Или коллега скинул в Slack однострочник, и его нужно подогнать под себя. curl есть везде, а флаги настолько лаконичны, что все их не помнит никто.
Эта шпаргалка по curl собрана именно для таких моментов. Сначала идёт таблица быстрого доступа с десятком флагов, которые используются ежедневно, а дальше — готовые к копированию примеры команд для типовых задач: запросы GET и POST, отправка заголовков, авторизация по Bearer-токену, загрузка и скачивание файлов, тестирование API в скриптах. В каждой команде стоит реальный рабочий URL (httpbin.org или плейсхолдер api.example.com), так что любой пример можно вставить и попробовать. Поведение сверено с официальной документацией curl и RFC 9110, актуальным стандартом семантики HTTP.
Быстрый справочник — флаги curl, которые действительно пригодятся
Девяносто процентов повседневной работы с curl сводятся к десятку флагов. Добавьте эту таблицу в закладки; остальная часть руководства разбирает каждый из них на рабочих примерах команд curl.
| Флаг | Назначение | Пример |
|---|---|---|
-X | Задать HTTP-метод | curl -X DELETE https://api.example.com/items/42 |
-H | Добавить заголовок запроса (можно повторять) | curl -H "Accept: application/json" https://httpbin.org/get |
-d | Отправить тело запроса (подразумевает POST) | curl -d "name=alice" https://httpbin.org/post |
--json | Отправить тело JSON + выставить JSON-заголовки | curl --json '{"id":1}' https://httpbin.org/post |
-F | Отправить поле/файл multipart-формы | curl -F "file=@report.pdf" https://httpbin.org/post |
-o | Сохранить вывод в файл с заданным именем | curl -o page.html https://example.com |
-O | Сохранить под именем файла на сервере | curl -O https://example.com/archive.zip |
-L | Следовать за редиректами | curl -L https://httpbin.org/redirect/2 |
-u | Basic-авторизация user:pass | curl -u alice:s3cret https://httpbin.org/basic-auth/alice/s3cret |
-i | Включить в вывод заголовки ответа | curl -i https://httpbin.org/get |
-I | Получить только заголовки (HEAD) | curl -I https://example.com |
-v | Подробный режим: запрос + TLS-рукопожатие | curl -v https://example.com |
-s | Тихий режим (без индикатора прогресса) | curl -s https://httpbin.org/get |
-w | Вывести переменные после передачи | curl -s -o /dev/null -w "%{http_code}" https://example.com |
-b | Отправить cookie (строка или файл) | curl -b cookies.txt https://httpbin.org/cookies |
-c | Сохранить полученные cookie в файл | curl -c cookies.txt https://httpbin.org/cookies/set/a/1 |
-k | Пропустить проверку TLS-сертификата | curl -k https://self-signed.example.com |
--http2 | Запросить HTTP/2 | curl --http2 https://example.com |
--http3 | Запросить HTTP/3 (QUIC) | curl --http3 https://example.com |
-T | Загрузить файл методом PUT | curl -T backup.tar https://api.example.com/files/backup.tar |
--data-urlencode | URL-кодировать поле тела | curl --data-urlencode "q=hello world" https://httpbin.org/get -G |
--max-time | Ограничивает общую длительность передачи (секунды) | curl --max-time 10 https://example.com |
--connect-timeout | Ограничивает установку соединения (секунды) | curl --connect-timeout 5 https://example.com |
--retry | Повторяет неудавшуюся передачу N раз | curl --retry 3 https://example.com |
--limit-rate | Ограничивает пропускную способность передачи | curl --limit-rate 2M -O https://example.com/big.iso |
Основы синтаксиса curl — анатомия запроса
Команда curl — это сам бинарник, несколько флагов и URL. URL может стоять до или после флагов; порядок curl безразличен. А вот что для него важно, так это какие флаги подразумевают метод или тело: они влияют друг на друга.
Простой GET-запрос
Без флага метода curl отправляет GET. Вот и вся команда:
curl https://httpbin.org/get
httpbin возвращает ваш запрос обратно в виде JSON — потому он и удобен для тестирования. Строка запроса добавляется так же, как в браузере:
curl "https://httpbin.org/get?page=2&sort=desc"
Берите URL в кавычки. Голый & указывает оболочке увести команду в фон и молча отбрасывает всё, что идёт после него. Это одна из самых частых ошибок при работе с curl, разобранная в разделе про подводные камни ниже.
Просмотр ответа: тело, заголовки или то и другое
По умолчанию curl выводит только тело ответа. Три флага меняют то, что вы видите:
# Тело + строка статуса + заголовки ответа
curl -i https://httpbin.org/get
# Только заголовки — отправляется запрос HEAD, без тела
curl -I https://example.com
# Полная трассировка: строка запроса, заголовки запроса, TLS-рукопожатие, ответ
curl -v https://example.com
Берите -i, когда нужно тело плюс беглый взгляд на Content-Type или Set-Cookie. -I проверяет ресурс без скачивания (размер файла, дата изменения, цель редиректа). А -v пригодится, когда что-то идёт не так и нужно увидеть, что именно отправил curl.
Следование за редиректами
curl не следует за редиректами, пока его об этом не попросишь. Обратитесь к URL, который возвращает 301 или 302, без -L — и в ответ придёт сам редирект, а не пункт назначения:
# Останавливается на 302, ничего полезного не выводит
curl https://httpbin.org/redirect/1
# Проходит цепочку до финального 200
curl -L https://httpbin.org/redirect/1
Если непонятно, почему запрос приходит туда, куда приходит, -IL покажет код статуса каждого перехода. О том, что означает каждый из этих кодов и почему 301 и 302 не взаимозаменяемы, читайте в шпаргалке по HTTP-кодам состояния.
HTTP-методы в curl (GET, POST, PUT, PATCH, DELETE)
curl выбирает метод автоматически на основе ваших флагов: -d или --json подразумевают POST, обычный URL подразумевает GET. Используйте -X только тогда, когда нужен метод, не совпадающий с отправляемым телом.
GET с параметрами запроса
Собирать строку запроса вручную легко с ошибками, как только в значениях появляются пробелы или &. Флаг -G указывает curl добавить поля --data-urlencode к URL в виде корректно закодированной строки запроса:
curl -G https://httpbin.org/get \
--data-urlencode "q=hello world" \
--data-urlencode "tag=c++"
Получается ?q=hello%20world&tag=c%2B%2B: curl сам выполняет процентное кодирование, так что сломанный URL вы не отправите.
POST: данные формы или JSON
curl post request обычно бывает двух видов. Form-encoded (классическое тело HTML-формы):
curl -d "name=alice&role=admin" https://httpbin.org/post
-d выставляет Content-Type: application/x-www-form-urlencoded и сам переключает метод на POST. Для JSON-API отправляйте уже JSON:
curl -d '{"name":"alice","role":"admin"}' \
-H "Content-Type: application/json" \
https://httpbin.org/post
Есть способ изящнее, он описан в следующем разделе.
PUT и PATCH
PUT заменяет ресурс целиком; PATCH обновляет его часть. PUT идемпотентен — отправка дважды оставляет то же состояние.
# Заменить ресурс целиком
curl -X PUT -d '{"name":"alice","role":"owner"}' \
-H "Content-Type: application/json" \
https://api.example.com/users/7
# Обновить одно поле
curl -X PATCH -d '{"role":"owner"}' \
-H "Content-Type: application/json" \
https://api.example.com/users/7
DELETE
DELETE обычно не несёт тела, так что достаточно одного -X:
curl -X DELETE https://api.example.com/users/7
Отправка заголовков и тел JSON
Большая часть реальной работы с API — это заголовки и JSON. Основную нагрузку здесь несут два флага: -H и --json.
Свои заголовки curl через -H
-H добавляет один заголовок и повторяется сколько угодно раз. Так задаются Accept, Authorization, свои X--заголовки и идентификаторы запросов:
curl https://httpbin.org/headers \
-H "Accept: application/json" \
-H "X-Request-Id: 9f3c1a" \
-H "User-Agent: my-cli/1.0"
Чтобы убрать заголовок по умолчанию, который curl иначе отправил бы, передайте ему пустое значение (-H "User-Agent:"). А чтобы отправить заголовок без значения, поставьте точку с запятой (-H "X-Empty;").
POST с JSON: -d или современный флаг --json
Начиная с curl 7.82, --json — идиоматичный способ отправить JSON в curl post request. Он сразу выставляет Content-Type: application/json и Accept: application/json, а тело отправляет без изменений.
# Многословный, старый способ — три части нужно держать в согласии
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name":"alice"}' \
https://httpbin.org/post
# Современный эквивалент
curl --json '{"name":"alice"}' https://httpbin.org/post
--json можно повторять: значения конкатенируются, а --json @file.json читает тело из файла. Для любого JSON-API он предпочтительнее.
Content-Type и Accept
Именно из этих двух заголовков растут ошибки 415 и 406. Content-Type описывает тело, которое вы отправляете; Accept сообщает, что вы хотите получить в ответ. Отправьте JSON на endpoint, принимающий только данные формы, и получите 415 Unsupported Media Type. Запросите XML у API, отдающего только JSON, и можете получить 406 Not Acceptable. (Эти коды разобраны в руководстве по HTTP-кодам состояния.)
Когда ответ приходит стеной минифицированного JSON, отформатируйте его в Форматировщике JSON либо направьте сразу в jq, чтобы вытащить одно поле:
curl -s https://httpbin.org/json | jq '.slideshow.title'
Полный набор фильтров jq — выборка, преобразование и переформирование ответов API — смотрите в шпаргалке по jq для командной строки.
Аутентификация в curl
Почти любой API закрывается одним из четырёх способов авторизации: basic-авторизация, Bearer-токены, API-ключи и cookie.
Basic-авторизация (-u user:pass)
-u отправляет HTTP-заголовок Authorization: Basic с вашими учётными данными в кодировке Base64:
curl -u alice:s3cret https://httpbin.org/basic-auth/alice/s3cret
Опустите пароль (-u alice), и curl спросит его сам, не оставляя в истории оболочки.
Bearer-токены и OAuth
Большинство современных API используют curl bearer token: access-token OAuth 2.0 или API-токен в заголовке Authorization. У curl есть сокращение --oauth2-bearer, равнозначное тому, чтобы прописать заголовок вручную:
# Явный заголовок
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.abc" \
https://api.example.com/me
# Сокращение
curl --oauth2-bearer "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.abc" \
https://api.example.com/me
Если бэкенд отклоняет токен, декодируйте его в Декодере JWT и проверьте поля exp (срок действия), aud (аудитория) и iss (издатель), прежде чем винить curl: обычная причина в истёкшем токене или неверной аудитории.
API-ключи (заголовок или параметр запроса)
Одни API ждут ключ в заголовке, другие — в параметре запроса. Заголовок безопаснее, потому что URL попадают в логи и историю браузера:
# Предпочтительно: ключ в заголовке
curl -H "X-API-Key: sk_live_a1b2c3" https://api.example.com/data
# Менее безопасно: ключ в URL (оседает в логах доступа)
curl "https://api.example.com/data?api_key=sk_live_a1b2c3"
Cookie (-b для отправки, -c для сохранения)
-c пишет файл cookie, -b читает его обратно. Так сессия переносится между запросами:
# Войти и сохранить cookie сессии
curl -c jar.txt -d "user=alice&pass=s3cret" https://httpbin.org/cookies/set/session/abc123
# Переиспользовать на следующем вызове
curl -b jar.txt https://httpbin.org/cookies
Замечание о безопасности: токены и учётные данные допустимы только на HTTPS-соединениях, ведь TLS шифрует заголовки, а простой HTTP нет. Не передавайте секреты прямо в командной строке, где они оседают в истории оболочки и в выводе ps. Читайте заголовок из файла через -H @authfile или берите значение из переменной окружения (-H "Authorization: Bearer $TOKEN").
Скачивание и загрузка файлов
curl получил имя «client URL», потому что перемещение файлов — его изначальная задача. И у скачивания, и у загрузки есть свои флаги, которые стоит знать.
Скачивание: -O, -o и -C -
-O (заглавная O) сохраняет файл под именем, которое было на сервере. -o (строчная) даёт выбрать имя самому. -C - возобновляет частично скачанный файл с того места, где он оборвался:
# Сохранить под именем с сервера: archive.zip
curl -O https://example.com/downloads/archive.zip
# Сохранить под выбранным вами именем
curl -o backup.zip https://example.com/downloads/archive.zip
# Возобновить прерванное скачивание
curl -C - -O https://example.com/downloads/archive.zip
# Следовать за редиректами к настоящему файлу (часто на CDN)
curl -OL https://example.com/latest/archive.zip
Чтобы выполнить curl download file для содержимого, спрятанного за редиректом, добавьте -L: страницы релизов и ссылки CDN почти всегда перенаправляют.
Загрузка: -T и -F
-T загружает файл методом PUT, отправляя сырые байты как тело (типично для объектных хранилищ и файловых REST-endpoint). -F отправляет запрос multipart/form-data — тот же формат, что использует браузер для полей загрузки файлов:
# PUT сырых байтов
curl -T report.pdf https://api.example.com/files/report.pdf
# Загрузка multipart/form-data (обратите внимание на префикс @)
curl -F "file=@report.pdf" -F "title=Q2 report" https://httpbin.org/post
Префикс @ говорит curl прочитать содержимое файла. Без него -F "file=report.pdf" отправит буквальную строку report.pdf, а не файл.
--data-urlencode и процентное кодирование
Когда значение содержит пробелы, &, = или символы вне ASCII, -d отправляет его как есть и ломает запрос. --data-urlencode кодирует такое значение корректно:
# Неправильно: & разрезает тело, пробел недопустим
curl -d "q=hello world&filter=a&b" https://httpbin.org/post
# Правильно: каждое поле кодируется процентами
curl --data-urlencode "q=hello world" \
--data-urlencode "filter=a&b" \
https://httpbin.org/post
Если нужно понять, что означают эти последовательности %20 и %26, или отладить значение с двойным кодированием, вставьте его в URL декодер и кодировщик либо прочитайте разбор на уровне байтов в руководстве по URL-кодированию и декодированию.
Тестирование API и анализ ответов
curl особенно хорош в скриптах и CI: -w раскрывает всё о передаче, а коды возврата делают сбои заметными.
Только код статуса
Чтобы получить лишь HTTP-статус, отбросьте тело через -o /dev/null и выведите код через -w:
curl -s -o /dev/null -w "%{http_code}\n" https://httpbin.org/status/204
# → 204
Это основа любой проверки работоспособности в curl api testing. Что означает полученное число, разбирает шпаргалка по HTTP-кодам состояния — по каждому диапазону.
Разбивка по времени
-w раскрывает переменные времени, так что видно, куда оно уходит: DNS, TCP-соединение, TLS или сам сервер:
curl -s -o /dev/null \
-w "dns=%{time_namelookup}s connect=%{time_connect}s tls=%{time_appconnect}s total=%{time_total}s\n" \
https://example.com
# → dns=0.004s connect=0.021s tls=0.058s total=0.142s
Высокий time_appconnect указывает на TLS, высокий time_starttransfer — на медленный бэкенд.
Тихо, но с показом ошибок
-s прячет индикатор прогресса, но заодно прячет и сообщения об ошибках, и это ловушка в скриптах. Сочетайте его с -S, чтобы curl молчал при успехе и всё же сообщал о сбоях:
curl -sS https://api.example.com/health
curl в CI / скриптах: падать на HTTP-ошибках
По умолчанию curl завершается с кодом 0 даже при 404 или 500, потому что сама передача удалась. Для проверки работоспособности это ровно наоборот тому, что нужно. -f (fail) заставляет curl завершаться с ненулевым кодом при HTTP-ошибках, чтобы ваш конвейер их ловил:
# Заваливает сборку, если endpoint возвращает 4xx/5xx
curl -fsS https://api.example.com/health || exit 1
-fsS (fail, silent, show-errors) — каноническая комбинация для проверки работоспособности. Когда нужна диагностика побогаче, --fail-with-body (curl 7.76+) всё же выводит тело ответа с ошибкой перед завершением.
Тайм-ауты и повторные попытки
Проверка работоспособности, которая висит вечно, хуже той, что быстро падает. Ограничивайте каждый запрос в скрипте: --max-time (потолок на всю передачу) и --connect-timeout (потолок только на установку соединения):
# Сдаться после 5 с соединения, 10 с в сумме
curl --connect-timeout 5 --max-time 10 -fsS https://api.example.com/health
В нестабильной сети --retry повторяет неудавшуюся передачу с экспоненциальной задержкой. По умолчанию повторяются только временные сбои (тайм-ауты, 5xx); добавьте --retry-all-errors, чтобы повторять и отклонённые соединения:
# До 3 попыток с растущей паузой между ними
curl --retry 3 --retry-all-errors --max-time 30 -fsS https://api.example.com/health
Когда скрипт скачивает большой файл и вы не хотите перегружать канал, --limit-rate ограничивает пропускную способность — --limit-rate 2M держит её на 2 МБ/с.
HTTP/1.1, HTTP/2 и HTTP/3 в curl
curl согласует версию HTTP поверх TLS через ALPN. Версию можно задать принудительно, когда нужно протестировать конкретный путь протокола.
--http2 и --http3
# Запросить HTTP/2 (откатывается к 1.1, если недоступен)
curl --http2 https://example.com
# Запросить HTTP/3 поверх QUIC
curl --http3 https://example.com
HTTP/3 работает поверх QUIC и требует TLS 1.3. Он сработает, только если ваш curl собран с бэкендом, поддерживающим HTTP/3, и сервер анонсирует его через заголовок Alt-Svc. Запустите curl --version и убедитесь, что HTTP3 есть в строке возможностей; если нет, --http3 выдаст ошибку.
Подробная информация о TLS / ALPN
-v показывает согласованный протокол и TLS-рукопожатие; так и проверяется, что версия действительно вступила в силу:
curl -v --http2 https://example.com 2>&1 | grep -i "ALPN\|HTTP/2"
# → * ALPN: server accepted h2
# → > GET / HTTP/2
Ищите ALPN: server accepted h2 (HTTP/2) или h3 (HTTP/3) в выводе рукопожатия.
8 частых ошибок с curl (и как их исправить)
Эти восемь рано или поздно подставляют каждого.
-
Одинарные или двойные кавычки. Двойные кавычки позволяют оболочке раскрывать
$VARS; одинарные передают всё буквально. Используйте одинарные кавычки для тел JSON, чтобы$и!не интерпретировались:curl --json '{"price":"$5"}'. Используйте двойные кавычки, когда раскрытие нужно:-H "Authorization: Bearer $TOKEN". -
-dне выполняет URL-кодирование. Пробел или&в значении-dпортит тело. Переходите на--data-urlencodeдля любого значения, которое ещё не закодировано. -
Лишний
-X POSTвместе с-d.-dуже подразумеваетPOST. Писать-X POST -d ...безвредно, но избыточно; хуже того,-X GET -d ...отправляет тело с GET, и это сбивает с толку некоторые серверы. Пусть метод задаёт флаг тела. -
Забытый
@при чтении из файла.-d @body.jsonчитает файл;-d body.jsonотправляет буквальный текстbody.json. Та же ловушка с-F "file=@upload.png"против-F "file=upload.png". -
Хвататься за
-kпри ошибках сертификата.-kотключает проверку TLS и прячет настоящие проблемы (истёкшие сертификаты, неверный хост, отсутствующий промежуточный сертификат). Устраняйте первопричину: установите CA через--cacert ca.pemили обновите системное хранилище доверенных сертификатов. Приберегите-kдля самоподписанного dev-сервера, который вы полностью контролируете. -
-s, проглатывающий ошибки. Тихий режим прячет сбои в скриптах. Всегда используйте-sS, чтобы ошибки всё же всплывали. -
[]{}в URL, попадающие под globbing. curl трактует[1-5]и{a,b}как URL-диапазоны/списки. URL с буквальными скобками (часто в параметрах-массивах вродеarr[]=1) искажается. Отключите globbing через-g:curl -g "https://api.example.com/items?id[]=1&id[]=2". -
Регистр и дубликаты заголовков. Имена HTTP-заголовков регистронезависимы, но отправка одного и того же заголовка дважды обычно отправляет оба — одни серверы берут первый, другие последний, третьи отклоняют запрос. Если вы переопределяете значение по умолчанию вроде
User-Agent, задайте его один раз через-H, а не полагайтесь на порядок.
curl, wget или HTTPie — что выбрать
Все три скачивают данные по HTTP, но заточены под разные задачи. Вот решение curl vs wget (плюс HTTPie) одним взглядом:
| Задача | curl | wget | HTTPie |
|---|---|---|---|
| Быстрый вызов API / отладка | Отлично | Ограниченно | Отлично |
| Тела JSON | Хорошо (--json) | Неудобно | Отлично (нативно) |
| Рекурсивное скачивание / зеркалирование сайта | Нет | Отлично (-r) | Нет |
| Возобновление + повторы крупных загрузок | Хорошо (-C -) | Отлично (встроено) | Нет |
Скриптинг / CI (коды возврата, -w) | Отлично | Хорошо | Хорошо |
| Красивый цветной вывод по умолчанию | Нет | Нет | Отлично |
| Предустановлен почти везде | Да | Часто | Редко |
Если коротко: берите curl для отладки API и скриптов (он есть везде, а -w не имеет равных), HTTPie — когда нужна удобная работа с JSON на своей машине, и wget — для зеркалирования сайтов или пакетного скачивания файлов с автоповторами.
Часто задаваемые вопросы
Для чего используется curl?
curl — это инструмент командной строки для передачи данных на сервер и обратно по HTTP, HTTPS, FTP и многим другим протоколам. Разработчики вызывают и отлаживают им API, скачивают и загружают файлы, запускают проверки работоспособности в скриптах и CI-конвейерах.
Как отправить POST-запрос через curl?
Возьмите -d для данных формы или --json для JSON: curl --json '{"name":"alice"}' https://httpbin.org/post. Оба флага сами выставляют метод POST, так что -X POST не нужен.
Как добавить заголовок в curl?
Возьмите -H "Name: value" и повторяйте для нескольких заголовков: curl -H "Accept: application/json" -H "X-Request-Id: 9f3c1a" https://httpbin.org/headers. Количество передач -H ничем не ограничено.
Как отправить Bearer-токен через curl?
Передайте заголовок Authorization: curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/me, либо используйте сокращение --oauth2-bearer YOUR_TOKEN. Отправляйте токены только по HTTPS и декодируйте их в Декодере JWT при отладке.
Как скачать файл через curl?
Возьмите -O, чтобы сохранить имя файла с сервера, или -o name, чтобы выбрать своё: curl -O https://example.com/archive.zip. Добавьте -L для следования за редиректами и -C - для возобновления прерванного скачивания.
Как увидеть только HTTP-код состояния через curl?
Отбросьте тело и выведите код: curl -s -o /dev/null -w "%{http_code}" https://example.com. Это стандартный шаблон для проверок работоспособности в скриптах.
В чём разница между curl и wget?
curl передаёт один ресурс и по умолчанию пишет в stdout, потому и удобен для вызовов API и скриптинга. wget заточен под скачивание, включая рекурсивное зеркалирование и автоповторы. Для тестирования API берите curl; для массового скачивания файлов — wget.
Доступен ли curl в Windows?
Да. curl поставляется с Windows 10 (сборка 1803+) и Windows 11, доступен как curl в командной строке и в PowerShell. Учтите, что PowerShell исторически делал curl псевдонимом для Invoke-WebRequest, поэтому при странном поведении флагов вызывайте curl.exe явно.
Подводя итог
curl отзывается на небольшое усилие по запоминанию: таблица флагов в начале покрывает почти всё, что вы будете набирать, а дальше остаётся понять, какие флаги подразумевают метод, какие требуют кавычек и какие обманывают вас в скриптах (это о тебе, голый -s). Держите эту шпаргалку по curl открытой рядом с терминалом. Если вы предпочитаете составлять команды интерактивно, попробуйте наш конструктор команд cURL для их визуальной генерации.
Естественные следующие шаги в работе с API — в одном клике. Отправьте запрос через curl, прочитайте ответ со шпаргалкой по HTTP-кодам состояния, затем отформатируйте JSON в Форматировщике JSON или разберите его по кусочкам со шпаргалкой по jq для командной строки. Полный список опций подробно изложен в руководстве по curl, а HTTP-справочник MDN объясняет семантику каждого метода и заголовка.