Effettua richieste HTTP senza curl
Potresti lavorare su un server senza curl o wget. Devi testare un endpoint ma questi strumenti mancano. Puoi usare Bash per inviare richieste HTTP direttamente.
Bash ha una funzionalità nascosta chiamata /dev/tcp. Non si tratta di un file reale. È un dispositivo speciale che Bash riconosce. Quando scrivi in /dev/tcp/hostname/port, Bash apre una connessione TCP per te.
Come funziona:
Si utilizza il comando exec per gestire i descrittori di file. Ad esempio, puoi aprire il descrittore di file 3 per la lettura e la scrittura.
La sintassi è la seguente:
exec 3<>/dev/tcp/example.com/80
Una volta aperta la connessione, puoi inviarvi dati. Puoi anche leggere i dati da essa. Questo metodo ti mostra come funziona il protocollo HTTP a basso livello.
Come effettuare una richiesta GET:
Per ottenere i dati, devi inviare gli header corretti. È necessaria una riga vuota alla fine per segnalare la fine della richiesta.
Segui questi passaggi:
- Imposta le variabili host, port e path.
- Apri la connessione utilizzando
exec. - Usa
printfper inviare la richiesta GET. Usa\r\nper la fine delle righe. - Usa
cato un ciclo per leggere la risposta. - Chiudi il descrittore di file al termine.
Esempio di script:
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>&-
Questa tecnica ti aiuta a capire come client e server comunicano tra loro. È una competenza utile per il debugging su sistemi minimalisti.