Faça Requisições HTTP Sem Curl
Você pode estar trabalhando em um servidor sem curl ou wget. Você precisa testar um endpoint, mas essas ferramentas estão ausentes. Você pode usar o Bash para enviar requisições HTTP diretamente.
O Bash possui um recurso oculto chamado /dev/tcp. Este não é um arquivo real. É um dispositivo especial que o Bash entende. Quando você escreve em /dev/tcp/hostname/port, o Bash abre uma conexão TCP para você.
Como funciona:
Você usa o comando exec para gerenciar descritores de arquivo. Por exemplo, você pode abrir o descritor de arquivo 3 para leitura e escrita.
A sintaxe é assim: exec 3<>/dev/tcp/example.com/80
Assim que esta conexão estiver aberta, você envia dados para ela. Você também lê dados dela. Este método mostra como o protocolo HTTP funciona em baixo nível.
Como fazer uma requisição GET:
Para obter dados, você deve enviar os cabeçalhos corretos. Você precisa de uma linha em branco ao final para sinalizar o término da sua requisição.
Siga estes passos:
- Defina suas variáveis de host, porta e caminho.
- Abra a conexão usando exec.
- Use printf para enviar a requisição GET. Use \r\n para as quebras de linha.
- Use cat ou um loop para ler a resposta.
- Feche o descritor de arquivo quando terminar.
Script de exemplo:
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>&-
Esta técnica ajuda você a entender como clientes e servidores se comunicam. É uma habilidade útil para depuração em sistemas minimalistas.