Maak HTTP-verzoeken zonder curl
Je werkt misschien op een server zonder curl of wget. Je moet een endpoint testen, maar die tools ontbreken. Je kunt Bash gebruiken om rechtstreeks HTTP-verzoeken te verzenden.
Bash heeft een verborgen functie genaamd /dev/tcp. Dit is geen echt bestand. Het is een speciaal apparaat dat Bash begrijpt. Wanneer je schrijft naar /dev/tcp/hostname/port, opent Bash een TCP-verbinding voor je.
Hoe het werkt:
Je gebruikt het exec-commando om file descriptors te beheren. Je kunt bijvoorbeeld file descriptor 3 openen voor lezen en schrijven.
De syntaxis ziet er als volgt uit:
exec 3<>/dev/tcp/example.com/80
Zodra deze verbinding open is, kun je er gegevens naar verzenden. Je kunt er ook gegevens uit lezen. Deze methode laat je zien hoe het HTTP-protocol op een laag niveau werkt.
Hoe je een GET-verzoek maakt:
Om gegevens op te halen, moet je de juiste headers verzenden. Je hebt een lege regel aan het einde nodig om het einde van je verzoek aan te geven.
Volg deze stappen:
- Stel je host-, poort- en padvariabelen in.
- Open de verbinding met behulp van
exec. - Gebruik
printfom het GET-verzoek te verzenden. Gebruik\r\nvoor regeleinden. - Gebruik
catof een loop om de respons te lezen. - Sluit de file descriptor wanneer je klaar bent.
Voorbeeldscript:
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>&-
Deze techniek helpt je begrijpen hoe clients en servers met elkaar communiceren. Het is een nuttige vaardigheid voor het debuggen op minimalistische systemen.