Curl ಇಲ್ಲದೆ HTTP ರಿಕ್ವೆಸ್ಟ್ಗಳನ್ನು ಮಾಡುವುದು
ನೀವು curl ಅಥವಾ wget ಇಲ್ಲದ ಸರ್ವರ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡಬೇಕಾಗಬಹುದು. ನೀವು ಒಂದು ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಬೇಕಿದೆ ಆದರೆ ಆ ಪರಿಕರಗಳು (tools) ಅಲ್ಲಿ ಇಲ್ಲದಿರಬಹುದು. ನೀವು ನೇರವಾಗಿ HTTP ರಿಕ್ವೆಸ್ಟ್ಗಳನ್ನು ಕಳುಹಿಸಲು Bash ಅನ್ನು ಬಳಸಬಹುದು.
Bash ನಲ್ಲಿ /dev/tcp ಎಂಬ ಗುಪ್ತ ವೈಶಿಷ್ಟ್ಯವಿದೆ. ಇದು ನಿಜವಾದ ಫೈಲ್ ಅಲ್ಲ. ಇದು Bash ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಒಂದು ವಿಶೇಷ ಸಾಧನ (special device). ನೀವು /dev/tcp/hostname/port ಗೆ ಬರೆದಾಗ, Bash ನಿಮಗಾಗಿ ಒಂದು TCP ಕನೆಕ್ಷನ್ ಅನ್ನು ತೆರೆಯುತ್ತದೆ.
ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ:
ಫೈಲ್ ಡಿಸ್ಕ್ರಿಪ್ಟರ್ಗಳನ್ನು (file descriptors) ನಿರ್ವಹಿಸಲು ನೀವು exec ಕಮಾಂಡ್ ಅನ್ನು ಬಳಸುತ್ತೀರಿ. ಉದಾಹರಣೆಗೆ, ನೀವು ಓದಲು ಮತ್ತು ಬರೆಯಲು ಫೈಲ್ ಡಿಸ್ಕ್ರಿಪ್ಟರ್ 3 ಅನ್ನು ತೆರೆಯಬಹುದು.
ಸಿಂಟ್ಯಾಕ್ಸ್ (syntax) ಈ ರೀತಿ ಇರುತ್ತದೆ:
exec 3<>/dev/tcp/example.com/80
ಈ ಕನೆಕ್ಷನ್ ತೆರೆದ ನಂತರ, ನೀವು ಅದಕ್ಕೆ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಬಹುದು ಮತ್ತು ಅದರಿಂದ ಡೇಟಾವನ್ನು ಓದಬಹುದು. ಈ ವಿಧಾನವು HTTP ಪ್ರೊಟೊಕಾಲ್ ಕಡಿಮೆ ಮಟ್ಟದಲ್ಲಿ (low level) ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಮಗೆ ತೋರಿಸುತ್ತದೆ.
GET ರಿಕ್ವೆಸ್ಟ್ ಮಾಡುವುದು ಹೇಗೆ:
ಡೇಟಾವನ್ನು ಪಡೆಯಲು, ನೀವು ಸರಿಯಾದ ಹೆಡರ್ಗಳನ್ನು (headers) ಕಳುಹಿಸಬೇಕು. ನಿಮ್ಮ ರಿಕ್ವೆಸ್ಟ್ ಮುಕ್ತಾಯಗೊಂಡಿದೆ ಎಂದು ಸೂಚಿಸಲು ಕೊನೆಯಲ್ಲಿ ಒಂದು ಖಾಲಿ ಸಾಲು (blank line) ಇರಬೇಕು.
ಈ ಹಂತಗಳನ್ನು ಅನುಸರಿಸಿ:
- ನಿಮ್ಮ host, port, ಮತ್ತು path ವೇರಿಯೇಬಲ್ಗಳನ್ನು ನಿಗದಿಪಡಿಸಿ.
execಬಳಸಿ ಕನೆಕ್ಷನ್ ತೆರೆಯಿರಿ.- GET ರಿಕ್ವೆಸ್ಟ್ ಕಳುಹಿಸಲು
printfಬಳಸಿ. ಲೈನ್ ಎಂಡಿಂಗ್ಗಳಿಗಾಗಿ\r\nಬಳಸಿ. - ರೆಸ್ಪಾನ್ಸ್ ಓದಲು
catಅಥವಾ ಲೂಪ್ ಬಳಸಿ. - ಕೆಲಸ ಮುಗಿದ ನಂತರ ಫೈಲ್ ಡಿಸ್ಕ್ರಿಪ್ಟರ್ ಅನ್ನು ಮುಚ್ಚಿ.
ಉದಾಹರಣೆ ಸ್ಕ್ರಿಪ್ಟ್:
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>&-
ಕ್ಲೈಂಟ್ಗಳು ಮತ್ತು ಸರ್ವರ್ಗಳು ಪರಸ್ಪರ ಹೇಗೆ ಸಂವಹನ ನಡೆಸುತ್ತವೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಈ ತಂತ್ರವು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕನಿಷ್ಠ ಸೌಲಭ್ಯವಿರುವ (minimalist) ಸಿಸ್ಟಮ್ಗಳಲ್ಲಿ ಡಿಬಗ್ ಮಾಡಲು ಇದು ಉಪಯುಕ್ತ ಕೌಶಲ್ಯವಾಗಿದೆ.