Curl के बिना HTTP Requests कैसे करें
हो सकता है कि आप ऐसे सर्वर पर काम कर रहे हों जहाँ curl या wget उपलब्ध न हो। आपको किसी endpoint का परीक्षण करने की आवश्यकता है लेकिन वे टूल्स मौजूद नहीं हैं। आप HTTP requests सीधे भेजने के लिए Bash का उपयोग कर सकते हैं।
Bash में /dev/tcp नामक एक छिपा हुआ फीचर है। यह कोई वास्तविक फ़ाइल नहीं है। यह एक विशेष डिवाइस है जिसे Bash समझता है। जब आप /dev/tcp/hostname/port पर लिखते हैं, तो Bash आपके लिए एक TCP connection खोल देता है।
यह कैसे काम करता है:
आप file descriptors को मैनेज करने के लिए exec कमांड का उपयोग करते हैं। उदाहरण के लिए, आप पढ़ने और लिखने के लिए file descriptor 3 खोल सकते हैं।
इसका सिंटैक्स ऐसा दिखता है:
exec 3<>/dev/tcp/example.com/80
एक बार जब यह connection खुल जाता है, तो आप इसमें डेटा भेज सकते हैं। आप इससे डेटा पढ़ भी सकते हैं। यह तरीका आपको दिखाता है कि HTTP protocol कम स्तर (low level) पर कैसे काम करता है।
GET request कैसे करें:
डेटा प्राप्त करने के लिए, आपको सही headers भेजने होंगे। अपनी request के अंत का संकेत देने के लिए आपको अंत में एक खाली लाइन की आवश्यकता होती है।
इन चरणों का पालन करें:
- अपने host, port, और path variables सेट करें।
execका उपयोग करके connection खोलें।- GET request भेजने के लिए
printfका उपयोग करें। line endings के लिए\r\nका उपयोग करें। - response पढ़ने के लिए
catया loop का उपयोग करें। - काम पूरा होने पर file descriptor को बंद कर दें।
उदाहरण स्क्रिप्ट:
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 एक-दूसरे से कैसे बात करते हैं। यह minimalist systems पर debugging के लिए एक उपयोगी कौशल है।