curl
curl — консольный HTTP-клиент, но по факту умеет много больше: HTTP/1/2/3, FTP, SMTP, IMAP, POP3, LDAP, SMB, TFTP, SFTP, RTMP, gopher, dict, telnet — всего ~30 протоколов. Библиотека libcurl лежит внутри половины софта в мире (git, php, python-requests-совместимые фолбэки, embedded).
История
Написал Daniel Stenberg (Швеция) в 1996. Изначально называлась httpget, потом urlget, потом curl — от «see URL». Daniel до сих пор мейнтейнер. По самооценке автора, curl запущен на ~20 миллиардах устройств: серверы, IoT, машины Tesla, приставки Sony, роутеры, консоли. Даже в марсоходах NASA.
Базовые примеры
# GET
curl https://example.com
curl -v https://example.com # verbose: покажет заголовки
curl -sSL https://example.com # silent, showError, follow-redirects
# HEAD (только заголовки)
curl -I https://example.com
# POST JSON
curl -X POST https://api.example.com/x -H "Content-Type: application/json" -d '{"key":"value"}'
# файл на диск
curl -o out.html https://example.com
curl -O https://example.com/file.zip # имя файла с URL
# resume (докачка)
curl -C - -O https://example.com/big.iso
Флаги которые надо знать
-v— verbose. Покажет весь handshake, заголовки, размеры.-I/--head— только заголовки (HEAD-запрос).-L— следовать редиректам (301/302).-s— silent (без прогресс-бара).-S— show errors даже при-s.-o file/-O— сохранять в файл.-H "Header: value"— задать заголовок.-A "UA"— задать User-Agent.-e "referer"— задать Referer.-b "cookie=value"/-c cookies.txt— cookie in/out.-X METHOD— метод запроса.-d 'body'/--data-binary @file— тело.-F name=value/-F file=@path— multipart/form-data.-u user:pass— Basic Auth.--max-time 10— общий таймаут.--connect-timeout 5— только на установку соединения.-k/--insecure— не проверять сертификат (осторожно).--resolve host:port:IP— принудительный DNS.-x socks5://127.0.0.1:1080— прокси. Естьhttp://,https://,socks4://,socks5://,socks5h://(DNS через прокси).--http1.1/--http2/--http3— версия HTTP.--tls-max 1.3/--tlsv1.3— версия TLS.-w "%{time_total}"— форматный вывод timing/статусов после запроса.
Timing (аналог ping/traceroute для HTTP)
curl -w "\nDNS: %{time_namelookup}s\nTCP: %{time_connect}s\nTLS: %{time_appconnect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
-o /dev/null -s https://example.com
Покажет по этапам: DNS, TCP-handshake, TLS-handshake, время до первого байта, общее. Так проще всего диагностировать «где тормозит».
Проверить VPN-ключ через curl
Работает SOCKS/HTTP-прокси или нет:
# через SOCKS5 (например, xray на 10808)
curl -x socks5h://127.0.0.1:10808 https://ifconfig.me
# ответит внешним IP выхода прокси, если работает
Разница socks5:// vs socks5h:// — первый резолвит DNS локально, второй передаёт имя серверу. Для проверки «прокси работает целиком» лучше socks5h.
HTTP/3
Не все сборки curl умеют — нужен собранный с QUIC-библиотекой (nghttp3 + ngtcp2, quiche, msh3). Проверить:
curl --version | grep -i http3
curl --http3 https://cloudflare-quic.com/
Заменители/альтернативы
- wget — проще, но меньше протоколов, лучше для рекурсивной скачки сайта.
- httpie — красивый curl, JSON по умолчанию, синтаксис
http POST url key=value. - xh / hurl — быстрые Rust-клиенты в стиле httpie.
- Bruno, Postman, Insomnia — GUI-клиенты для API.
Ссылки
- Сайт: curl.se
- Все команды:
curl --manualилиman curl - Онлайн-конвертер cURL→код: curl.trillworks.com