إجراء طلبات HTTP بدون curl
قد تعمل على خادم لا يتوفر فيه curl أو wget. قد تحتاج إلى اختبار نقطة نهاية (endpoint) ولكن هذه الأدوات مفقودة. يمكنك استخدام Bash لإرسال طلبات HTTP مباشرة.
يحتوي Bash على ميزة مخفية تسمى /dev/tcp. هذا ليس ملفاً حقيقياً، بل هو جهاز خاص يفهمه Bash. عندما تكتب إلى /dev/tcp/hostname/port ، يقوم Bash بفتح اتصال TCP من أجلك.
كيف تعمل هذه الطريقة:
تستخدم أمر exec لإدارة واصفات الملفات (file descriptors). على سبيل المثال، يمكنك فتح واصف الملف 3 للقراءة والكتابة.
تبدو الصيغة البرمجية كالتالي:
exec 3<>/dev/tcp/example.com/80
بمجرد فتح هذا الاتصال، يمكنك إرسال البيانات إليه، كما يمكنك قراءة البيانات منه أيضاً. توضح لك هذه الطريقة كيفية عمل بروتوكول HTTP على مستوى منخفض.
كيفية إجراء طلب GET:
للحصول على البيانات، يجب عليك إرسال ترويسات (headers) صحيحة. ستحتاج إلى سطر فارغ في النهاية للإشارة إلى نهاية طلبك.
اتبع هذه الخطوات:
- قم بتعيين متغيرات المضيف (host)، والمنفذ (port)، والمسار (path).
- افتح الاتصال باستخدام
exec. - استخدم
printfلإرسال طلب GET. استخدم\r\nلنهايات الأسطر. - استخدم
catأو حلقة (loop) لقراءة الاستجابة. - أغلق واصف الملف عند الانتهاء.
نص برمجي كمثال:
HOST="example.com"
PORT=80
REQUEST_PATH="/"
exec 3<>/dev/tcp/${HOST}/${PORT}
printf "GET ${REQUEST_PATH} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
cat <&3
exec 3>&-
تساعدك هذه التقنية على فهم كيفية تواصل العملاء (clients) والخوادم (servers) مع بعضهم البعض. وهي مهارة مفيدة لتصحيح الأخطاء (debugging) في الأنظمة ذات الإمكانيات المحدودة (minimalist systems).