الاثنين، 22 يونيو 2026

إجراء طلبات HTTP من حاوية لا تحتوي على curl، باستخدام bash /dev/tcp

كنتُ بحاجة للتأكد من إمكانية وصول حاوية إلى أخرى عبر شبكة Docker داخلية: طلب GET بسيط إلى /health لخدمة على شبكة مشتركة. كان الخيار البديهي هو استخدام curl http://service:8642/health. لكن صورة التطبيق هذه كانت مُبسطة للغاية، بدون curl أو wget أو أي أدوات أخرى تُتيح لي فتح منفذ.
اتضح أن Bash يدعم بروتوكول HTTP بشكل مستقل، حيث يُمكنه فتح منفذ TCP، وكتابة طلب HTTP بسيط إليه يدويًا. لا يتطلب فتح اتصال بمضيف ومنفذ وكتابة الطلب أي شيء إضافي عن واجهة سطر الأوامر الموجودة بالفعل.
الخدمة هنا هي مجرد اسم المضيف لأي شيء تتصل به. يجب أن يكون هذا الاسم قابلاً للحل والوصول إليه من أي مكان تُشغّل منه هذا الأمر، لذا يجب إعداده أولاً: اسم حاوية أو خدمة على شبكة Docker قمتَ بتكوينها، أو أي اسم DNS قابل للحل. استبدل اسم المضيف والمنفذ الخاصين بك.
سيؤدي هذا إلى طباعة الاستجابة كاملةً: سطر الحالة، والعناوين، والسطر الفارغ، وجسم الاستجابة. لإضافة عنوان، مثل Authorization: Bearer token، ضع سطرًا آخر ينتهي بـ \r\n قبل السطر الفارغ الذي يُنهي الطلب.

تعديل: أثار هذا الموضوع نقاشًا مثيرًا للاهتمام على موقع Hacker News - اطلعوا عليه أيضًا!

ليست هناك تعليقات:

إرسال تعليق

القوائم المترابطة المتضمنة (Intrusive linked lists)

القوائم المتصلة المتداخلة (Intrusive linked lists) هي نوع من القوائم المتصلة التي تكون فيها روابط الربط مُضمَّنةً داخل البنية نفسها التي يجر...