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 се добавя автоматично.
  • Сесии запазват бисквитките и заглавията между заявките, което е удобно за тестване на удостоверени крайни точки.
  • Добавки разширяват 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 стойности, които не са низове (числа, булеви стойности, масиви): active:=true tags:=["dev","test"].
  • key@file — зареждане на стойност от файл: avatar@~/photo.jpg.

Httpie автоматично определя типа данни: ако е предадено key=value — тялото се изпраща като JSON. Ако се предаде суров текст чрез --raw — като обикновен текст. Форматът 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. Ако е необходимо съдържанието на файл да се изпрати като сурово тяло на заявката, се използва пренасочване на входа: 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"

Управление на сесии и бисквитки

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

Пример за тестване на сесия

Първо се изпълнява POST към /auth/login с идентификационни данни — сървърът връща бисквитката на сесията. Всички последващи заявки към защитени крайни точки в рамките на същата сесия автоматично изпращат запазената бисквитка, което имитира поведението на браузъра при тестване на API на мобилно приложение.

bash
# Стъпка 1: удостоверяване
http --session=app-test POST https://api.example.com/auth/login \
    username="dev" password="secret"

# Стъпка 2: заявка със запазена бисквитка на сесията
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 е здрав" || \
    echo "Проверката на API не успя"

Разширени възможности и добавки на 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 с автоматичен обмен на код за токен.
  • 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 за числа и булеви стойности.
  • Сесиите запазват бисквитки и заглавия между заявките за тестване на удостоверени крайни точки.
  • Удостоверяването поддържа Basic, Digest, Bearer и персонализирани схеми чрез флага --auth-type.
  • CI/CD интеграция с --check-status и нулеви зависимости прави Httpie удобен за скриптове за разгръщане.
  • Качване на файлове чрез multipart form-data с флага -f и синтаксиса key@file.

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също