Httpie — کلاینت HTTP مبتنی بر کنسول با سینتکس قابل خواندن برای انسان و خروجی رنگی است که برای تست API از خط فرمان طراحی شده است. این ابزار از سینتکس شهودی استفاده میکند: http GET https://api.example.com/users بدون نیاز به مشخصکردن فلگها برای هدرها و بدنه درخواست. طبق Httpie CLI Documentation (2026)، این ابزار بهصورت پیشفرض از JSON، نشستها، احراز هویت و پلاگینها پشتیبانی میکند.
نکات اصلی
Httpie (یا HTTPie) یک ابزار کنسولی نوشتهشده به زبان Python است که ارسال درخواستهای HTTP را در مقایسه با cURL سادهتر میکند. تفاوت اصلی سینتکسی نزدیک به زبان طبیعی است: آرگومانها با فاصله جدا میشوند، هدرها با دونقطه و دادههای JSON با علامت مساوی، بدون نیاز به escape کردن نقلقولها مشخص میشوند.
همان درخواست POST در cURL به حداقل سه فلگ (-X, -H, -d) و escape کردن دستی JSON نیاز دارد. Httpie همین کار را با سه کلمه بدون فلگ انجام میدهد، بهطور خودکار Content-Type: application/json را تنظیم میکند و خروجی را رنگی میکند. پاسخ بهصورت پیشفرض با فاصلهگذاری و هایلایت سینتکس قالببندی میشود.
| عملیات | cURL | Httpie |
|---|---|---|
| درخواست GET | curl https://api.example.com | http GET https://api.example.com |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com | http POST https://api.example.com name=test |
| هدر | curl -H "Authorization: Bearer token123" https://api.example.com | http GET https://api.example.com Authorization:"Bearer token123" |
Httpie از یک فرمت واحد خط فرمان بدون فلگ برای پارامترهای اصلی استفاده میکند. متد HTTP بهعنوان اولین آرگومان (GET, POST, PUT, DELETE, PATCH) و URL بهعنوان دومین مشخص میشود. اگر متد حذف شود، Httpie بهطور خودکار GET (برای درخواستهای بدون بدنه) یا POST (با بدنه) را انتخاب میکند.
Authorization:"Bearer token".name=John age=30.active:=true tags:=["dev","test"].avatar@~/photo.jpg.Httpie بهطور خودکار نوع داده را تشخیص میدهد: اگر key=value ارسال شود، بدنه بهصورت JSON ارسال میشود. اگر متن خام از طریق --raw ارسال شود — بهصورت متن ساده. فرمت form-data با فلگ -f فعال میشود.
# درخواست 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 در Httpie بهطور خودکار کار میکند: مقداری که بهصورت key=value ارسال میشود به فیلد رشتهای JSON تبدیل میشود. برای اعداد و مقادیر بولین از key:=value استفاده میشود. اشیاء تودرتو با نماد نقطهای ساخته میشوند: address.city=Moscow.
Httpie از فرمت multipart/form-data برای بارگذاری فایلها و دادهها از طریق سینتکس key@path پشتیبانی میکند. اگر لازم است محتوای یک فایل بهعنوان بدنه خام درخواست ارسال شود، از بازنویسی ورودی استفاده میشود: http POST example.com < file.json. برای دانلود پاسخ در یک فایل از فلگ -d (download) استفاده میشود.
# ارسال 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 اپلیکیشن موبایل شبیهسازی میکند.
# مرحله 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 در هر جای دستور اضافه میشوند.
برای تست API با OAuth 2.0، توکن از طریق هدر Authorization منتقل میشود. Httpie چرخه حیات توکن را در سطح هسته مدیریت نمیکند — این کار توسط اسکریپت خارجی انجام میشود. دستور http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource معادل مشخصکردن صریح هدر با توکن است.
Httpie به لطف وابستگیهای صفر (بهجز Python) و خروجی خوانا برای پایپلاینهای CI/CD ایدهآل است. دستورها بدون نیاز به پارس اضافی بهراحتی در لاگها خوانده میشوند. این ابزار از طریق pip نصب میشود و در همه تصاویر محبوب Docker از جمله Alpine، Ubuntu و تصاویر رسمی سیستمهای CI یعنی Jenkins و GitLab در دسترس است. این موضوع Httpie را به انتخاب مناسبی برای تست خودکار REST API و میکروسرویسها تبدیل میکند.
سناریوی معمول — بررسی وضعیت API بعد از دیپلوی اپلیکیشن. Httpie درخواست را به health-اندارپوینت ارسال میکند و اگر پاسخ مطابق انتظار نباشد با کد غیرصفر خاتمه مییابد. فلگ --check-status در صورت کد وضعیت >= 300 بهطور خودکار خطا برمیگرداند.
# Health check در اسکریپت دیپلوی
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "API سالم است" || \
echo "بررسی API ناموفق بود"
Httpie از پلاگینها از طریق سیستم Package Index پشتیبانی میکند. پلاگینها انواع جدید احراز هویت، فرمتهای سریالسازی و ترنسپورتها را اضافه میکنند. نصب از طریق pip انجام میشود: pip install httpie-plugin-name. بعد از نصب، پلاگین در راهاندازی بعدی Httpie بهطور خودکار فعال میشود.
Httpie از فیلترکردن مشابه jq از طریق گزینه --pretty=format و خروجی سازگار با cURL از طریق --print پشتیبانی میکند. فلگ --quiet خروجی رنگی را برای خوانایی بهتر در لاگهای CI غیرفعال میکند. برای پردازش برنامهنویسی پاسخ از فلگ --body استفاده کنید که فقط بدنه پاسخ را بدون هدرها نمایش میدهد.
# استخراج فیلد از پاسخ 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 برای ترمینالهای مختلف.
برای پردازش برنامهنویسی از --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 برای انواع مختلف ترمینالها و ترجیحات شخصی.
برای پردازش برنامهنویسی خروجی از ترکیب فلگهای --body --pretty=none استفاده کنید که JSON خام را بدون رنگ و فاصلهگذاری برمیگرداند. خروجی فشرده برای انتقال به jq، sed و سایر پارسرهای کنسولی در هنگام اتوماسیون تست REST API در اسکریپتهای شل مفید است.
سوالات متداول
Httpie سینتکس خواناتری بدون فلگ برای عملیات پایه، سریالسازی خودکار JSON، هایلایت رنگی پاسخ و پشتیبانی داخلی از نشستها ارائه میدهد. cURL برای عملیات سطح پایین ضروری باقی میماند: کار با FTP، SMTP و پروتکلهای غیراستاندارد.
از فلگ -f (یا --form) استفاده کنید: http -f POST example.com name=John file@~/photo.jpg. Httpie بهطور خودکار Content-Type: multipart/form-data را تنظیم میکند. بدون فلگ -f دادهها بهصورت application/json ارسال میشوند.
بله، Httpie از HTTPS پشتیبانی میکند. برای گواهیهای خودامضا از فلگ --verify=no استفاده کنید. برای مشخصکردن فایل CA سفارشی: --verify=/path/to/cert.pem. بهصورت پیشفرض بررسی گواهی فعال است.
خیر، Httpie از WebSocket پشتیبانی نمیکند و صرفاً برای پروتکل HTTP/HTTPS طراحی شده است. برای WebSocket از websocat یا wscat استفاده کنید. Httpie بر REST، GraphQL و عملیات فایلی تمرکز دارد.
از فلگ -d (download) استفاده کنید: http -d GET https://example.com/file.zip. Httpie فایل را با نام اصلی از هدر Content-Disposition یا URL ذخیره میکند. برای نام سفارشی -o output.zip را مشخص کنید.
جمعبندی
http [method] URL [key=value] [Header:value] برای اکثر درخواستها به فلگ نیاز ندارد.ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید