Requisições HTTP sem curl: Bash /dev/tcp explicado
Você está dentro de um container Docker enxuto.
Você precisa verificar um endpoint de API.
Você digita curl e recebe "command not found".
Você tenta wget e recebe o mesmo erro.
Você não precisa entrar em pânico.
O Bash possui um recurso oculto integrado ao seu núcleo.
Ele se chama /dev/tcp.
Este recurso permite abrir conexões TCP brutas sem instalar nenhuma ferramenta. Funciona em quase qualquer sistema Linux.
Como funciona:
Quando você referencia /dev/tcp/hostname/port, o Bash abre uma conexão de socket.
Este é um recurso específico do Bash.
Não funcionará no sh ou zsh.
O comando mágico:
exec 3<>/dev/tcp/hostname/port
Esta linha abre um descritor de arquivo bidirecional. Você pode escrever dados nele e ler as respostas de volta.
Exemplo de requisição 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>&-
Por que isso é útil: • Depuração em ambientes minimalistas onde você não pode instalar pacotes. • Execução de health checks em pipelines de CI/CD com zero dependências. • Testar conectividade em sistemas embarcados. • Aprender exatamente como os cabeçalhos HTTP funcionam.
Limites importantes para lembrar:
• Sem HTTPS: O Bash não consegue lidar com criptografia TLS/SSL. Use openssl s_client para tráfego criptografado.
• Sem redirecionamentos: Você deve lidar com eles manualmente.
• Sem complexidade: Não use isso para clientes HTTP de produção. Use curl para isso.
Sempre inclua o cabeçalho Connection: close.
Se você esquecê-lo, seu script pode travar enquanto espera pelo servidor.
Da próxima vez que você estiver preso em um servidor restrito, use este truque. Ele transforma um beco sem saída em uma ferramenta funcional.
Source: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852
Optional learning community: https://t.me/GyaanSetuAi