linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-curl

kb/commands ── Команды ── beginner

curl - HTTP-клиент из терминала

`curl` - universal CLI для HTTP/HTTPS/FTP/etc. Делает запросы, видит заголовки, сертификаты, тайминги. Главный инструмент дебага HTTP API.

view as markdownaka: http-client

Базовые формы

bash
curl https://example.com                  # GET, тело в stdout
curl -s https://api.example/users         # -s: silent (без progress bar)
curl -o out.html https://example.com      # сохранить в файл
curl -O https://example.com/file.tar.gz   # сохранить с original-именем
curl -X POST -d 'name=alice' https://...  # POST с form-данными
curl -X POST -H "Content-Type: application/json" -d '{"x":1}' https://...
curl -X DELETE https://api.example/u/123

Заголовки и аутентификация

bash
curl -H "Authorization: Bearer $TOKEN" https://api.example
curl -u user:pass https://api.example     # basic auth
curl --cookie "session=abc" https://...
curl -A "Mozilla/5.0" https://...         # User-Agent

Дебаг-флаги

bash
curl -v https://example.com               # verbose: видим request + response headers
curl -I https://example.com               # ТОЛЬКО headers (HEAD-запрос; быстрая проверка)
curl --trace-ascii - https://example.com  # дамп всех байт обмена
curl -w "@curl-format.txt" -o /dev/null -s https://example.com  # тайминги

Формат для -w:

time_namelookup:    %{time_namelookup}s
time_connect:       %{time_connect}s
time_appconnect:    %{time_appconnect}s   # TLS-handshake
time_starttransfer: %{time_starttransfer}s # TTFB
time_total:         %{time_total}s

Видно где именно тормозит: dns-resolution / TCP / tls-handshake / сервер.

TLS

bash
curl -k https://self-signed             # пропустить проверку сертификата (НЕ для прода!)
curl --cacert ca.pem https://...         # доверять конкретному CA
curl --cert client.pem --key client.key  # mTLS
curl --resolve example.com:443:1.2.3.4 https://example.com   # подмена DNS

--resolve - золото для тестов: ходит к указанному IP, но шлёт корректный SNI/Host. Без правки /etc/hosts.

Повторы и таймауты

bash
curl --max-time 10 https://...           # общий timeout 10с
curl --connect-timeout 5 https://...     # только TCP-connect
curl --retry 3 --retry-delay 2 https://... # auto-retry на сетевых ошибках

Pipe в jq

bash
curl -s https://api.github.com/repos/torvalds/linux | jq '.stargazers_count'

Стандартная связка для REST-дебага.

§ команды

bash
curl -I https://example.com

Только response headers - быстрая проверка статуса, редиректов, версии HTTP

bash
curl -v -o /dev/null -s https://example.com 2>&1 | grep -E '^[<>]'

Чистый дамп request/response headers (без тела)

bash
curl -X POST -H 'Content-Type: application/json' -d @body.json https://api.example

POST с JSON из файла (@filename = взять содержимое файла)

bash
curl --resolve api.test:443:127.0.0.1 https://api.test/health

Подменить DNS-резолв для теста, не трогая /etc/hosts

bash
curl -w '%{time_total}s\n' -o /dev/null -s https://example.com

Полное время запроса - для измерения latency

§ см. также

  • cmd-jqjq - запросы и трансформация JSONjq - запросный язык для JSON в shell. `.field`, `.array[]`, `select(...)`, `map(...)`, пайпы внутри выражения через `|`. `-r` снимает кавычки, `-c` пакует в строку. Идеально для curl + jq + grep.
  • tls-handshakeTLS handshakeTLS - слой шифрования поверх TCP. Перед передачей данных стороны делают handshake: обмениваются ключами, проверяют сертификат, выбирают cipher.
  • http-protocolHTTP/1.1, HTTP/2, HTTP/3HTTP/1.1 - текстовый протокол с keep-alive. HTTP/2 - бинарный с мультиплексированием в одном TCP-соединении. HTTP/3 = HTTP/2-семантика поверх QUIC/UDP без TCP-head-of-line blocking.
  • http2-internalsHTTP/2 internals - binary framing, HPACK, stream multiplexingHTTP/2 - бинарный мультиплексинг поверх одного TCP-соединения. HPACK сжимает headers через индексированный словарь. Streams независимы. Server push deprecated. На loss-friendly link HoL-blocking - проблема, которую решил QUIC.
  • websocketWebSocket - bidirectional поверх HTTPWebSocket - двусторонний канал поверх одного TCP. Апгрейд из HTTP/1.1 через Upgrade header, потом обмен бинарными frame'ами. Используется для real-time UI - чаты, дашборды, live-обновления.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки