𝗛𝗧𝗧𝗣 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗰𝘂𝗿𝗹: 𝗕𝗮𝘀𝗵 /𝗱𝗲𝘃/𝗧𝗖𝗣 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱
أنت داخل حاوية Docker مبسطة (stripped-down).
تحتاج إلى فحص نقطة نهاية API.
تكتب curl فتظهر لك رسالة "command not found".
تجرب wget فتظهر لك نفس الرسالة.
لا داعي للذعر.
يحتوي Bash على ميزة مخفية مدمجة في جوهره.
تُسمى /dev/tcp.
تتيح لك هذه الميزة فتح اتصالات TCP خام دون تثبيت أي أدوات. وهي تعمل على أي نظام Linux تقريبًا.
كيف تعمل:
عندما تشير إلى /dev/tcp/hostname/port ، يقوم Bash بفتح اتصال socket.
هذه ميزة خاصة بـ Bash فقط.
ولن تعمل في sh أو zsh.
الأمر السحري:
exec 3<>/dev/tcp/hostname/port
يفتح هذا السطر واصف ملف (file descriptor) ثنائي الاتجاه. يمكنك كتابة البيانات إليه وقراءة الردود منه.
مثال لطلب GET:
#!/bin/bash
exec 3<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" >&3
cat <&3
exec 3>&-
لماذا هذا مفيد: • تصحيح الأخطاء (Debugging) في البيئات الدنيا حيث لا يمكنك تثبيت الحزم. • إجراء فحوصات الحالة (health checks) في خطوط أنابيب CI/CD دون أي تبعات (dependencies). • اختبار الاتصال في الأنظمة المدمجة (embedded systems). • تعلم كيفية عمل ترويسات HTTP (HTTP headers) بدقة.
حدود مهمة يجب تذكرها:
• لا يدعم HTTPS: لا يستطيع Bash التعامل مع تشفير TLS/SSL. استخدم openssl s_client لحركة المرور المشفرة.
• لا يدعم إعادة التوجيه (Redirects): يجب عليك التعامل معها يدويًا.
• لا يستخدم للتعقيدات: لا تستخدم هذا لإنشاء عملاء HTTP للإنتاج (production). استخدم curl لهذا الغرض.
أضف دائمًا ترويسة Connection: close.
إذا نسيتها، فقد يتوقف السكربت الخاص بك عن الاستجابة (hang) أثناء انتظار الخادم.
في المرة القادمة التي تجد فيها نفسك عالقًا في خادم مقيد، استخدم هذه الحيلة. فهي تحول الطريق المسدود إلى أداة فعالة.
المصدر: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi