curl இல்லாமல் HTTP கோரிக்கைகள்: Bash /dev/tcp விளக்கம்
நீங்கள் மிகக் குறைந்த வசதிகள் கொண்ட ஒரு Docker container-க்குள் இருக்கிறீர்கள். நீங்கள் ஒரு API endpoint-ஐச் சரிபார்க்க வேண்டும். நீங்கள் curl என்று தட்டச்சு செய்கிறீர்கள், ஆனால் "command not found" என்று வருகிறது. நீங்கள் wget-ஐ முயற்சிக்கிறீர்கள், அதே பிழை வருகிறது.
நீங்கள் பயப்படத் தேவையில்லை. Bash-ன் மையப்பகுதியிலேயே ஒரு மறைமுக வசதி உள்ளது. அது /dev/tcp என்று அழைக்கப்படுகிறது.
எந்தவொரு கருவிகளையும் நிறுவாமலேயே, இந்த வசதி மூலம் நீங்கள் நேரடி (raw) TCP இணைப்புகளைத் தொடங்க முடியும். இது கிட்டத்தட்ட அனைத்து Linux அமைப்புகளிலும் வேலை செய்யும்.
இது எவ்வாறு செயல்படுகிறது: நீங்கள் /dev/tcp/hostname/port என்று குறிப்பிடும்போது, Bash ஒரு socket இணைப்பைத் திறக்கிறது. இது Bash-க்கு மட்டுமே உரிய ஒரு வசதியாகும். இது sh அல்லது zsh-இல் வேலை செய்யாது.
அந்த மந்திரக் கட்டளை:
exec 3<>/dev/tcp/hostname/port
இந்த வரி ஒரு இருவழித் தரவுப் பரிமாற்றத்திற்கான (bidirectional) 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>&-
இது ஏன் பயனுள்ளது: • தொகுப்புகளை (packages) நிறுவ முடியாத மிகக் குறைந்த வசதிகள் கொண்ட சூழல்களில் பிழைத்திருத்தம் (Debugging) செய்ய. • எந்தவிதத் சார்புகளும் (dependencies) இன்றி CI/CD குழாய்களில் (pipelines) health checks-களை இயக்க. • உட்பொதிக்கப்பட்ட அமைப்புகளில் (embedded systems) இணைப்பைச் சோதிக்க. • HTTP headers எவ்வாறு செயல்படுகின்றன என்பதைத் துல்லியமாகக் கற்றுக்கொள்ள.
நினைவில் கொள்ள வேண்டிய முக்கியமான வரம்புகள்: • HTTPS இல்லை: Bash-ஆல் TLS/SSL குறியாக்கத்தைக் (encryption) கையாள முடியாது. குறியாக்கம் செய்யப்பட்ட போக்குவரத்திற்கு openssl s_client-ஐப் பயன்படுத்தவும். • Redirects இல்லை: அவற்றை நீங்கள் கைமுறையாகக் கையாள வேண்டும். • சிக்கலான பயன்பாடுகளுக்கு அல்ல: இதைத் தயாரிப்பு (production) HTTP clients-களுக்குப் பயன்படுத்த வேண்டாம். அதற்கு curl-ஐப் பயன்படுத்தவும்.
எப்போதும் Connection: close header-ஐச் சேர்க்கவும்.
நீங்கள் அதை மறந்தால், உங்கள் script சர்வர் பதிலுக்காகக் காத்திருக்கும்போது அப்படியே நின்றுவிடக்கூடும் (hang).
அடுத்த முறை நீங்கள் கட்டுப்பாடுகள் அதிகம் உள்ள ஒரு சர்வரில் சிக்கிக்கொண்டால், இந்தத் தந்திரத்தைப் பயன்படுத்தவும். இது ஒரு முட்டுச்சந்தையைச் செயல்படும் கருவியாக மாற்றுகிறது.
Source: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852
Optional learning community: https://t.me/GyaanSetuAi