Httpie هو عميل HTTP يعمل من سطر الأوامر ببنية نصية مقروءة وإخراج ملون، مصمم لاختبار واجهات برمجة التطبيقات من سطر الأوامر. تستخدم الأداة بنية نصية بديهية: http GET https://api.example.com/users دون الحاجة إلى تحديد خيارات للترويسات وجسم الطلب. وفقًا لـ Httpie CLI Documentation (2026)، تدعم الأداة JSON افتراضيًا، والجلسات، والمصادقة، والإضافات.
أهم النقاط
Httpie (أو HTTPie) هو أداة سطر أوامر مكتوبة بلغة Python تسهّل إرسال طلبات HTTP مقارنةً بـ cURL. الفرق الرئيسي هو بنية نصية قريبة من اللغة الطبيعية: تُفصل الوسائط بمسافات، وتُحدد الترويسات بنقطتين، وتُحدد بيانات JSON بعلامة يساوي دون ترميز علامات الاقتباس.
يتطلب نفس طلب POST في cURL ثلاثة خيارات على الأقل (-X، -H، -d) وترميزًا يدويًا لـ 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"
# الرد مع التمييز والطباعة الجميلة
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 مع بيانات الاعتماد — يعيد الخادم ملف تعريف ارتباط للجلسة. جميع الطلبات اللاحقة إلى نقاط النهاية المحمية داخل الجلسة نفسها ترسل تلقائيًا ملف تعريف الارتباط المحفوظ، ما يحاكي سلوك المتصفح عند اختبار واجهة برمجة تطبيقات تطبيق جوال.
# الخطوة 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، يُمرَّر الرمز عبر ترويسة Authorization. لا يدير Httpie دورة حياة الرمز على مستوى النواة — بل يقوم بذلك سكربت خارجي. الأمر http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource يكافئ تحديد الترويسة مع الرمز صراحةً.
Httpie مثالي لخطوط أنابيب CI/CD بفضل غياب الاعتماديات (باستثناء Python) والإخراج المقروء. تُقرأ الأوامر بسهولة في السجلات دون تحليل إضافي. تُثبَّت الأداة عبر pip وتتوفر في جميع صور Docker الشائعة، بما فيها Alpine وUbuntu وصور CI الرسمية لـ Jenkins وGitLab. وهذا يجعل Httpie خيارًا ملائمًا للاختبار الآلي لواجهات REST والخدمات المصغرة.
سيناريو نموذجي هو التحقق من حالة واجهة برمجة التطبيقات بعد نشر التطبيق. يرسل Httpie طلبًا إلى نقطة نهاية الصحة وينتهي برمز غير صفري إذا لم يطابق الرد المتوقع. يعيد الخيار --check-status خطأً تلقائيًا عند رموز الحالة >= 300.
# فحص الصحة في سكربت النشر
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "واجهة برمجة التطبيقات سليمة" || \
echo "فشل فحص واجهة برمجة التطبيقات"
يدعم 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 وأدوات تحليل أخرى عند أتمتة اختبار واجهات برمجة التطبيقات في النصوص.
يدعم 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 في نصوص shell.
الأسئلة الشائعة
يقدم 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 تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا