Httpie: что это, HTTP-клиент для командной строки

Автор: IT Sectr Опубликовано: 2026-05-08 Время чтения: 8 мин

Httpie — консольный HTTP-клиент с человекочитаемым синтаксисом и цветным выводом, предназначенный для тестирования API из командной строки. Инструмент использует интуитивный синтаксис: http GET https://api.example.com/users без необходимости указывать флаги для заголовков и тела запроса. По данным Httpie CLI Documentation (2026), утилита поддерживает JSON по умолчанию, сессии, аутентификацию и плагины.

Главное

  • Httpie — современная замена cURL с читаемым синтаксисом, цветной подсветкой и встроенной JSON-сериализацией.
  • Синтаксис запроса строится по схеме: http [method] URL [header:value] [key=value] без дополнительных флагов.
  • JSON по умолчанию — тело запроса воспринимается как JSON-объект, заголовок Content-Type подставляется автоматически.
  • Сессии сохраняют cookies и заголовки между запросами, что удобно для тестирования аутентифицированных эндпоинтов.
  • Плагины расширяют Httpie поддержкой дополнительных форматов, типов аутентификации и кастомных транспортов.

Что такое Httpie и чем он отличается от cURL

Httpie (или HTTPie) — консольная утилита на Python, которая упрощает отправку HTTP-запросов по сравнению с cURL. Главное отличие — синтаксис, приближенный к естественному языку: аргументы разделяются пробелами, заголовки указываются через двоеточие, а JSON-данные — через знак равенства без экранирования кавычек.

Сравнение cURL и Httpie

Один и тот же POST-запрос в cURL требует минимум три флага (-X, -H, -d) и ручное экранирование JSON. Httpie делает то же самое тремя словами без флагов, автоматически выставляя Content-Type: application/json и подкрашивая вывод. Ответ форматируется с отступами и подсветкой синтаксиса по умолчанию.

ОперацияcURLHttpie
GET запросcurl https://api.example.comhttp GET https://api.example.com
POST JSONcurl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.comhttp POST https://api.example.com name=test
Заголовокcurl -H "Authorization: Bearer token123" https://api.example.comhttp GET https://api.example.com Authorization:"Bearer token123"

Синтаксис запросов в Httpie

Httpie использует единый формат командной строки без флагов для основных параметров. Метод HTTP указывается первым аргументом (GET, POST, PUT, DELETE, PATCH), URL — вторым. Если метод опущен, Httpie автоматически выбирает GET (для запросов без тела) или POST (с телом).

Типы аргументов

  • Header:Value — заголовки запроса с двоеточием, без пробела после двоеточия: Authorization:"Bearer token".
  • key=value — поля JSON-объекта в теле запроса: name=John age=30.
  • key:=value — JSON-значения non-string (числа, булевы, массивы): active:=true tags:=["dev","test"].
  • key@file — загрузка значения из файла: avatar@~/photo.jpg.

Httpie автоматически определяет тип данных: если переданы key=value — тело отправляется как JSON. Если передан raw-текст через --raw — как plain text. Формат form-data активируется флагом -f.

bash
# POST запрос с JSON-данными и заголовком
http POST https://api.example.com/users \
    name="John Doe" \
    email="john@example.com" \
    role:="admin" \
    Authorization:"Bearer test123"

# Ответ с подсветкой и Pretty-print
HTTP/1.1 201 Created
Content-Type: application/json
{
    "id": 42,
    "name": "John Doe"
}

Работа с JSON и файлами

JSON-сериализация в Httpie работает автоматически: значение, переданное как key=value, становится строковым полем JSON. Для чисел и булевых значений используется key:=value. Вложенные объекты создаются через точечную нотацию: address.city=Moscow.

Загрузка файлов и бинарных данных

Httpie поддерживает формат multipart/form-data для загрузки файлов и данных через синтаксис key@path. Если нужно отправить содержимое файла как raw-тело запроса, используется перенаправление ввода: http POST example.com < file.json. Для скачивания ответа в файл применяется флаг -d (download).

bash
# Отправка JSON из файла
http POST https://api.example.com/users < user.json

# Загрузка файла через multipart
http -f POST https://api.example.com/upload \
    photo@~/photo.jpg \
    description="Profile photo"

Управление сессиями и cookies

Сессии в Httpie сохраняют состояние между запросами: cookies, заголовки и параметры аутентификации. Сессия создаётся флагом --session=name. Данные сессии хранятся в JSON-файле в папке ~/.httpie/sessions/. Сессия с суффиксом :readonly не обновляется после запроса.

Пример сессионного тестирования

Сначала выполняется POST на /auth/login с учётными данными — сервер возвращает cookie сессии. Все последующие запросы к защищённым эндпоинтам внутри той же сессии автоматически отправляют сохранённый cookie, что имитирует поведение браузера при тестировании API мобильного приложения.

bash
# Шаг 1: аутентификация
http --session=app-test POST https://api.example.com/auth/login \
    username="dev" password="secret"

# Шаг 2: запрос с сохранённой cookie сессии
http --session=app-test GET https://api.example.com/users/me

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

Httpie поддерживает все основные типы аутентификации через флаги: -a user:pass для Basic Auth, --auth-type=digest для Digest, --auth-type=bearer TOKEN для Bearer Token. Кастомные заголовки добавляются как HeaderName:value в любом месте команды.

OAuth 2.0 и Bearer Token

Для тестирования API с OAuth 2.0 токен передаётся через заголовок Authorization. Httpie не управляет жизненным циклом токена на уровне ядра — это делает внешний скрипт. Команда http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource эквивалентна явному указанию заголовка с токеном.

Использование Httpie в CI/CD скриптах

Httpie идеально подходит для CI/CD-пайплайнов благодаря нулевым зависимостям (кроме Python) и читаемому выводу. Команды легко читаются в логах без дополнительного парсинга. Инструмент устанавливается через pip и доступен во всех популярных Docker-образах, включая Alpine, Ubuntu и официальные образы CI-систем Jenkins и GitLab. Это делает Httpie удобным выбором для автоматизированного тестирования REST API и микросервисов.

Проверка health-эндпоинта в деплое

Типовой сценарий — проверка статуса API после деплоя приложения. Httpie отправляет запрос к health-эндпоинту и завершается с ненулевым кодом, если ответ не соответствует ожидаемому. Флаг --check-status автоматически возвращает ошибку при статус-коде >= 300.

bash
# Health check в деплой-скрипте
http --check-status GET https://api.staging.example.com/health
    status:="ok" && \
    echo "API is healthy" || \
    echo "API check failed"

Расширенные возможности и плагины Httpie

Httpie поддерживает плагины через систему Package Index. Плагины добавляют новые типы аутентификации, форматы сериализации и транспорты. Установка выполняется через pip: pip install httpie-plugin-name. После установки плагин автоматически активируется при следующем запуске Httpie.

Популярные плагины Httpie

  • httpie-jwt-auth — автоматическое получение и обновление JWT токенов через механизм refresh token.
  • httpie-oauth — поддержка OAuth 2.0 Client Credentials и Authorization Code flow с автоматическим обменом кода на токен.
  • httpie-editor — открывает тело запроса в текстовом редакторе (vim, nano, VS Code) перед отправкой.
  • httpie-image — отображает изображения из ответа прямо в терминале (требуется kitty или iTerm2).

Скриптинг и парсинг вывода

Httpie поддерживает jq-подобную фильтрацию через опцию --pretty=format и cURL-совместимый вывод через --print. Флаг --quiet отключает цветной вывод для улучшенной читаемости в логах CI. Для программной обработки ответа используйте флаг --body, который выводит только тело ответа без заголовков.

bash
# Извлечение поля из JSON-ответа с помощью jq
http GET https://api.example.com/users/1 | jq '.name'

# Вывод только тела ответа (без заголовков)
http --body GET https://api.example.com/health

# Пакетная отправка с разными данными из файла
while read -r line; do
    http POST https://api.example.com/items $line
done < items.txt

Форматы вывода и кастомизация

Httpie поддерживает форматы вывода через флаг --print: H (заголовки запроса), B (тело запроса), h (заголовки ответа), b (тело ответа). Комбинация --print=hb выводит только заголовки и тело ответа. Флаг --pretty=all включает цветное форматирование с отступами.

Кастомные цветовые схемы

Httpie поддерживает кастомизацию через переменную HTTPIE_COLORS. Настройте цвет для URL, заголовков, JSON и статус-кодов. Доступны встроенные темы: autumn, borland, fruity, monokai, native, tango для разных терминалов.

Вывод в JSON формате

Для программной обработки используйте --body --pretty=none, возвращающее сырой JSON. Компактный вывод полезен для передачи в jq, sed и другие парсеры при автоматизации тестирования API в скриптах.

Форматы вывода и кастомизация оформления

Httpie поддерживает несколько форматов вывода через флаг --print: H (заголовки запроса), B (тело запроса), h (заголовки ответа), b (тело ответа). Комбинация --print=hb выводит только заголовки ответа и тело, исключая мета-информацию о соединении. Флаг --pretty=all включает цветное форматирование с отступами для читаемости.

Кастомные цветовые схемы

Httpie поддерживает кастомизацию цветов через переменную окружения HTTPIE_COLORS. Можно настроить цвет для URL, заголовков, JSON-ключей и статус-кодов ответа. Доступны встроенные темы оформления: autumn, borland, fruity, monokai, native и tango для разных типов терминалов и личных предпочтений.

Вывод в JSON формате без форматирования

Для программной обработки вывода используйте комбинацию флагов --body --pretty=none, которая возвращает сырой JSON без цветов и отступов. Компактный вывод полезен для передачи в jq, sed и другие консольные парсеры при автоматизации тестирования REST API в shell-скриптах.

Часто задаваемые вопросы

Чем Httpie лучше стандартного cURL?

Httpie предлагает более читаемый синтаксис без флагов для базовых операций, автоматическую JSON-сериализацию, цветную подсветку ответа и встроенную поддержку сессий. cURL остаётся незаменимым для низкоуровневых операций: работа с FTP, SMTP и нестандартными протоколами.

Как отправить form-data через Httpie?

Используйте флаг -f (или --form): http -f POST example.com name=John file@~/photo.jpg. Httpie автоматически выставит Content-Type: multipart/form-data. Без флага -f данные отправляются как application/json.

Поддерживает ли Httpie HTTPS и сертификаты?

Да, Httpie поддерживает HTTPS. Для самоподписанных сертификатов используйте флаг --verify=no. Для указания кастомного CA-файла: --verify=/path/to/cert.pem. По умолчанию проверка сертификата включена.

Можно ли использовать Httpie для WebSocket?

Нет, Httpie не поддерживает WebSocket и предназначен исключительно для HTTP/HTTPS протокола. Для WebSocket используйте websocat или wscat. Httpie фокусируется на REST, GraphQL и файловых операциях.

Как сохранить ответ в файл через Httpie?

Используйте флаг -d (download): http -d GET https://example.com/file.zip. Httpie сохранит файл с оригинальным именем из заголовка Content-Disposition или URL. Для кастомного имени укажите -o output.zip.

Итоги

  • Httpie — консольный HTTP-клиент с интуитивным синтаксисом, JSON по умолчанию и цветным выводом.
  • Базовый синтаксис http [method] URL [key=value] [Header:value] не требует флагов для большинства запросов.
  • JSON-сериализация автоматическая: key=value становится полем JSON, key:=value для чисел и булевых значений.
  • Сессии сохраняют cookies и заголовки между запросами для тестирования аутентифицированных эндпоинтов.
  • Аутентификация поддерживает Basic, Digest, Bearer и кастомные схемы через флаг --auth-type.
  • CI/CD интеграция с --check-status и нулевыми зависимостями делает Httpie удобным для деплой-скриптов.
  • Загрузка файлов через multipart form-data с флагом -f и синтаксисом key@file.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также