𝗛𝗧𝗧𝗣 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗰𝘂𝗿𝗹: 𝗕𝗮𝘀𝗵 /𝗱𝗲𝘃/𝗧𝗖𝗣 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱
तुम्ही एका अतिशय मर्यादित (stripped-down) Docker container मध्ये आहात. तुम्हाला एक API endpoint तपासायचा आहे. तुम्ही curl टाईप करता आणि "command not found" असा एरर येतो. तुम्ही wget वापरण्याचा प्रयत्न करता आणि तोच एरर येतो.
घाबरून जाण्याची गरज नाही. Bash मध्ये त्याच्या कोअरमध्ये एक लपलेले वैशिष्ट्य (feature) आहे. त्याला /dev/tcp म्हणतात.
हे वैशिष्ट्य तुम्हाला कोणतेही टूल्स इन्स्टॉल न करता थेट TCP कनेक्शन उघडण्याची परवानगी देते. हे जवळजवळ कोणत्याही Linux सिस्टमवर काम करते.
हे कसे कार्य करते: जेव्हा तुम्ही /dev/tcp/hostname/port चा संदर्भ देता, तेव्हा Bash एक socket connection उघडते. हे केवळ Bash साठी असलेले वैशिष्ट्य आहे. हे sh किंवा zsh मध्ये काम करणार नाही.
मॅजिक कमांड:
exec 3<>/dev/tcp/hostname/port
ही ओळ एक bidirectional file descriptor उघडते. तुम्ही त्यात डेटा लिहू शकता आणि प्रतिसाद (responses) वाचू शकता.
GET request चे उदाहरण:
#!/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>&-
हे का उपयुक्त आहे: • अशा किमान (minimal) वातावरणात डिबगिंग करण्यासाठी जिथे तुम्ही पॅकेजेस इन्स्टॉल करू शकत नाही. • शून्य अवलंबित्व (zero dependencies) असलेल्या CI/CD पाइपलाइन्समध्ये हेल्थ चेक चालवण्यासाठी. • एम्बेडेड सिस्टम्सवर कनेक्टिव्हिटी तपासण्यासाठी. • HTTP headers नेमके कसे काम करतात हे शिकण्यासाठी.
लक्षात ठेवण्यासारख्या महत्त्वाच्या मर्यादा: • No HTTPS: Bash TLS/SSL एन्क्रिप्शन हाताळू शकत नाही. एन्क्रिप्टेड ट्रॅफिकसाठी openssl s_client वापरा. • No Redirects: तुम्हाला ते मॅन्युअली हाताळावे लागतील. • No Complexity: हे प्रोडक्शन HTTP क्लायंटसाठी वापरू नका. त्यासाठी curl वापरा.
नेहमी Connection: close हेडर समाविष्ट करा. जर तुम्ही ते विसरलात, तर सर्व्हरची वाट पाहत तुमचा स्क्रिप्ट हँग होऊ शकते.
पुढच्या वेळी जेव्हा तुम्ही एखाद्या लॉक-डाऊन सर्व्हरमध्ये अडकाल, तेव्हा ही ट्रिक वापरा. हे एका बंद मार्गाचे रूपांतर उपयुक्त साधनात करते.
Source: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852
Optional learning community: https://t.me/GyaanSetuAi