curl વગર HTTP Requests: Bash /dev/TCP સમજાવેલ છે

તમે એક મર્યાદિત (stripped-down) Docker container ની અંદર છો. તમારે એક API endpoint તપાસવાની જરૂર છે. તમે curl ટાઈપ કરો છો અને "command not found" મળે છે. તમે wget અજમાવો છો અને તે જ ભૂલ મળે છે.

તમારે ગભરાવાની જરૂર નથી. Bash માં તેના કોર (core) માં જ એક છુપાયેલું ફીચર છે. તેને /dev/tcp કહેવામાં આવે છે.

આ ફીચર તમને કોઈપણ સાધનો ઇન્સ્ટોલ કર્યા વગર raw TCP કનેક્શન ખોલવાની મંજૂરી આપે છે. તે લગભગ કોઈપણ Linux સિસ્ટમ પર કામ કરે છે.

તે કેવી રીતે કામ કરે છે: જ્યારે તમે /dev/tcp/hostname/port નો સંદર્ભ આપો છો, ત્યારે Bash એક socket connection ખોલે છે. આ Bash-વિશિષ્ટ ફીચર છે. તે sh અથવા zsh માં કામ કરશે નહીં.

મેજિક કમાન્ડ: exec 3<>/dev/tcp/hostname/port

આ લાઇન એક bidirectional file descriptor ખોલે છે. તમે તેમાં ડેટા લખી શકો છો અને પ્રતિસાદ (responses) વાંચી શકો છો.

Example 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>&-

આ શા માટે ઉપયોગી છે: • એવા મિનિમલ એન્વાયરમેન્ટ્સમાં ડિબગિંગ કરવા માટે જ્યાં તમે પેકેજ ઇન્સ્ટોલ કરી શકતા નથી. • શૂન્ય નિર્ભરતા (zero dependencies) સાથે CI/CD પાઇપલાઇન્સમાં હેલ્થ ચેક ચલાવવા માટે. • એમ્બેડેડ સિસ્ટમ્સ પર કનેક્ટિવિટી ટેસ્ટ કરવા માટે. • HTTP headers બરાબર કેવી રીતે કામ કરે છે તે શીખવા માટે.

યાદ રાખવા જેવી મહત્વપૂર્ણ મર્યાદાઓ: • No HTTPS: Bash TLS/SSL એન્ક્રિપ્શન હેન્ડલ કરી શકતું નથી. એન્ક્રિપ્ટેડ ટ્રાફિક માટે openssl s_client નો ઉપયોગ કરો. • No Redirects: તમારે તેને મેન્યુઅલી હેન્ડલ કરવા પડશે. • No Complexity: આનો ઉપયોગ પ્રોડક્શન HTTP ક્લાયન્ટ્સ માટે કરશો નહીં. તેના માટે curl નો ઉપયોગ કરો.

હંમેશા Connection: close હેડરનો સમાવેશ કરો. જો તમે તે ભૂલી જશો, તો તમારું સ્ક્રિપ્ટ સર્વરની રાહ જોતી વખતે હેંગ (hang) થઈ શકે છે.

આગલી વખતે જ્યારે તમે લોક-ડાઉન સર્વરમાં ફસાયેલા હોવ, ત્યારે આ ટ્રિકનો ઉપયોગ કરો. તે એક નિષ્ફળતાના માર્ગને કામ કરતા સાધનમાં બદલી નાખશે.

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

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