Httpie: ما هو، عميل HTTP لسطر الأوامر

المؤلف: IT Sectr نُشر: 2026-05-08 وقت القراءة: 8 دق

Httpie هو عميل HTTP يعمل من سطر الأوامر ببنية نصية مقروءة وإخراج ملون، مصمم لاختبار واجهات برمجة التطبيقات من سطر الأوامر. تستخدم الأداة بنية نصية بديهية: 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
طلب GETcurl 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"

# الرد مع التمييز والطباعة الجميلة
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 مع بيانات الاعتماد — يعيد الخادم ملف تعريف ارتباط للجلسة. جميع الطلبات اللاحقة إلى نقاط النهاية المحمية داخل الجلسة نفسها ترسل تلقائيًا ملف تعريف الارتباط المحفوظ، ما يحاكي سلوك المتصفح عند اختبار واجهة برمجة تطبيقات تطبيق جوال.

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-type=digest لنوع Digest، و--auth-type=bearer TOKEN لرمز Bearer. تُضاف الترويسات المخصصة بصيغة HeaderName:value في أي مكان في الأمر.

OAuth 2.0 ورمز Bearer

لاختبار واجهة برمجة تطبيقات تستخدم 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 والخدمات المصغرة.

التحقق من نقطة نهاية الصحة أثناء النشر

سيناريو نموذجي هو التحقق من حالة واجهة برمجة التطبيقات بعد نشر التطبيق. يرسل Httpie طلبًا إلى نقطة نهاية الصحة وينتهي برمز غير صفري إذا لم يطابق الرد المتوقع. يعيد الخيار --check-status خطأً تلقائيًا عند رموز الحالة >= 300.

bash
# فحص الصحة في سكربت النشر
http --check-status GET https://api.staging.example.com/health
    status:="ok" && \
    echo "واجهة برمجة التطبيقات سليمة" || \
    echo "فشل فحص واجهة برمجة التطبيقات"

الإمكانات المتقدمة وإضافات Httpie

يدعم Httpie الإضافات عبر نظام Package Index. تضيف الإضافات أنواع مصادقة وتنسيقات تسلسل ووسائط نقل جديدة. يتم التثبيت عبر pip: pip install httpie-plugin-name. بعد التثبيت، تُفعَّل الإضافة تلقائيًا عند التشغيل التالي لـ Httpie.

إضافات Httpie الشائعة

  • httpie-jwt-auth — الحصول على رموز JWT وتحديثها تلقائيًا عبر آلية رمز التحديث.
  • 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 وأدوات تحليل أخرى عند أتمتة اختبار واجهات برمجة التطبيقات في النصوص.

تنسيقات الإخراج وتخصيص المظهر

يدعم 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 في نصوص 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. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا