𝗛𝗧𝗧𝗣 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗰𝘂𝗿𝗹: 𝗕𝗮𝘀𝗵 /𝗱𝗲𝘃/𝗧𝗖𝗣 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱

നിങ്ങൾ ഒരു മിനിമൽ (stripped-down) Docker കണ്ടെയ്നറിനുള്ളിലാണ്. നിങ്ങൾക്ക് ഒരു API എൻഡ്പോയിന്റ് പരിശോധിക്കേണ്ടതുണ്ട്. നിങ്ങൾ curl ടൈപ്പ് ചെയ്യുന്നു, പക്ഷേ "command not found" എന്ന് ലഭിക്കുന്നു. നിങ്ങൾ wget പരീക്ഷിക്കുന്നു, അതും അതേ എറർ തന്നെ ലഭിക്കുന്നു.

നിങ്ങൾ പരിഭ്രമിക്കേണ്ടതില്ല. Bash-ന്റെ കോറിലായി തന്നെ ഒരു രഹസ്യ ഫീച്ചർ ഉണ്ട്. ഇതിനെ /dev/tcp എന്ന് വിളിക്കുന്നു.

മറ്റ് ടൂളുകൾ ഇൻസ്റ്റാൾ ചെയ്യാതെ തന്നെ റോ (raw) TCP കണക്ഷനുകൾ തുറക്കാൻ ഈ ഫീച്ചർ നിങ്ങളെ അനുവദിക്കുന്നു. ഇത് ഏതാണ്ട് എല്ലാ ലിനക്സ് സിസ്റ്റങ്ങളിലും പ്രവർത്തിക്കും.

ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു: നിങ്ങൾ /dev/tcp/hostname/port എന്ന് ഉപയോഗിക്കുമ്പോൾ, Bash ഒരു സോക്കറ്റ് കണക്ഷൻ (socket connection) തുറക്കുന്നു. ഇതൊരു Bash-പ്രത്യേക ഫീച്ചറാണ്. ഇത് sh അല്ലെങ്കിൽ zsh-ൽ പ്രവർത്തിക്കില്ല.

മാന്ത്രിക കമാൻഡ്: exec 3<>/dev/tcp/hostname/port

ഈ വരി ഒരു ബൈഡയറക്ഷണൽ (bidirectional) ഫയൽ ഡിസ്ക്രിപ്റ്റർ തുറക്കുന്നു. നിങ്ങൾക്ക് ഇതിലേക്ക് ഡാറ്റ എഴുതാനും മറുപടികൾ വായിച്ചെടുക്കാനും കഴിയും.

ഉദാഹരണത്തിന് ഒരു 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>&-

ഇത് എന്തുകൊണ്ട് ഉപയോഗപ്രദമാണ്: • പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയാത്ത മിനിമൽ എൻവയോൺമെന്റുകളിൽ ഡീബഗ്ഗിംഗ് (Debugging) ചെയ്യാൻ. • ഡിപെൻഡൻസികൾ ഇല്ലാതെ തന്നെ CI/CD പൈപ്പ്‌ലൈനുകളിൽ ഹെൽത്ത് ചെക്കുകൾ (health checks) നടത്താൻ. • എംബഡഡ് സിസ്റ്റങ്ങളിൽ (embedded systems) കണക്റ്റിവിറ്റി പരിശോധിക്കാൻ. • HTTP ഹെഡറുകൾ കൃത്യമായി എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നതെന്ന് പഠിക്കാൻ.

ഓർമ്മിക്കേണ്ട പ്രധാന പരിമിതികൾ: • HTTPS ഇല്ല: Bash-ന് TLS/SSL എൻക്രിപ്ഷൻ കൈകാര്യം ചെയ്യാൻ കഴിയില്ല. എൻക്രിപ്റ്റഡ് ട്രാഫിക്കിനായി openssl s_client ഉപയോഗിക്കുക. • റീഡയറക്റ്റുകൾ (Redirects) ഇല്ല: അവ നിങ്ങൾ നേരിട്ട് കൈകാര്യം ചെയ്യേണ്ടതുണ്ട്. • സങ്കീർണ്ണതകൾ ഇല്ല: പ്രൊഡക്ഷൻ HTTP ക്ലയന്റുകൾക്കായി ഇത് ഉപയോഗിക്കരുത്. അതിനായി curl ഉപയോഗിക്കുക.

എപ്പോഴും Connection: close എന്ന ഹെഡർ ഉൾപ്പെടുത്തുക. നിങ്ങൾ ഇത് മറന്നാൽ, സെർവറിനായി കാത്തുനിൽക്കുമ്പോൾ നിങ്ങളുടെ സ്ക്രിപ്റ്റ് ഹാങ്ങ് (hang) ആയേക്കാം.

അടുത്ത തവണ നിയന്ത്രണങ്ങളുള്ള (locked-down) ഒരു സെർവറിൽ നിങ്ങൾ കുടുങ്ങിപ്പോയാൽ, ഈ ട്രിക്ക് ഉപയോഗിക്കുക. ഇത് ഒരു വഴിമുട്ടലിനെ ഉപയോഗപ്രദമായ ഒരു ടൂളായി മാറ്റുന്നു.

Source: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852

Optional learning community: https://t.me/GyaanSetuAi