O wget é uma ferramenta de linha de comando, presente por padrão na maioria dos sistemas Linux e macOS, usada para baixar arquivos e buscar páginas web. É bastante usada para baixar arquivos a partir de scripts em servidores, espelhar um site ou fazer um teste simples de acesso. Neste artigo explicamos três formas de rodar o wget via proxy, a autenticação, os detalhes de HTTPS, os cuidados em downloads em massa e os erros mais comuns, com comandos de exemplo.
Todas as opções apresentadas estão documentadas no manual do GNU Wget.
Antes de começar: o wget está instalado?
Verifique a versão no terminal:
wget --versionSe o comando não for encontrado, instale com sudo apt install wget no Debian e Ubuntu, ou com brew install wget via Homebrew no macOS. No Windows, o wget não vem instalado por padrão; para os mesmos trabalhos, pode-se usar o curl.exe, que já vem com o Windows 10 e versões posteriores. Já o wget do PowerShell não é o wget de verdade, é um apelido do comando Invoke-WebRequest, e não aceita as opções deste artigo.
Nos testes, usar um endereço que retorna o seu IP facilita o trabalho. Se o proxy estiver funcionando, esse endereço mostra não o seu IP, mas o do proxy:
wget -qO- https://httpbin.org/ipAqui, -q deixa a saída silenciosa, e -O- imprime o conteúdo baixado na tela em vez de gravar em arquivo. Rode uma vez antes de configurar o proxy e anote o seu próprio IP; nas tentativas seguintes, você verá a diferença na hora.
O formato do endereço do proxy
Nos três métodos, o proxy é escrito no mesmo formato:
http://usuario:senha@servidor:porta- O esquema
http://é o protocolo da conexão estabelecida com o proxy. Ele é usado mesmo ao acessar sites HTTPS; explicamos o motivo abaixo. - A parte
usuario:senha@é opcional. Se você autorizou o IP do seu servidor no painel do seu proxy, pode omitir essa parte completamente. - A informação
servidor:portavaria de acordo com o seu pacote; encontre os valores corretos no seu painel de cliente.
Método 1: por variáveis de ambiente
O wget lê as variáveis de ambiente padrão de proxy do sistema: http_proxy, https_proxy, ftp_proxy e no_proxy. Esse é o método mais rápido, e muitas outras ferramentas rodando no mesmo terminal também usam essas variáveis.
export http_proxy="http://usuario:senha@pr.proxynet.io:8000"
export https_proxy="http://usuario:senha@pr.proxynet.io:8000"
wget -qO- https://httpbin.org/ipHá três pontos a observar:
- O valor de
https_proxytambém começa comhttp://. Essa variável define o proxy que será usado para acessar sites HTTPS; a conexão estabelecida com o próprio proxy é HTTP, e o tráfego HTTPS é tunelado dentro dela. - As variáveis valem apenas para aquela sessão do terminal. Se quiser que sejam permanentes, adicione-as ao
~/.bashrcou~/.zshrc. - Prefira a grafia em minúsculas. O wget lê as variáveis em minúsculas; em alguns sistemas, a versão em maiúsculas
HTTP_PROXYtambém pode estar definida, e se as duas definições entrarem em conflito, isso pode confundir. O mais seguro é definir as duas com o mesmo valor.
Se você quer que determinados endereços não passem pelo proxy, use no_proxy:
export no_proxy="localhost,127.0.0.1,.suaempresa.local"Essa variável evita que serviços da rede interna ou servidores de desenvolvimento local passem pelo proxy. Um domínio começando com ponto abrange todos os subdomínios daquele domínio.
Método 2: na linha de comando, uso pontual
Para passar apenas um comando específico pelo proxy sem alterar as variáveis de ambiente, você pode passar as configurações do wget diretamente no comando com a opção -e (--execute):
wget -e use_proxy=yes \
-e https_proxy=http://pr.proxynet.io:8000 \
--proxy-user=usuario \
--proxy-password=senha \
https://httpbin.org/ip -O -Esse método é especialmente útil em scripts: a configuração de proxy não afeta outros comandos, e você pode passar um proxy diferente em cada chamada. Por exemplo, em um loop, se você quiser fazer cada download a partir de um ponto de saída diferente, pode ler o valor de -e https_proxy= a partir da variável do loop.
Cada linha passada com -e é uma configuração que também pode ser gravada no arquivo .wgetrc. Ou seja, cada chave que você verá no próximo método também vale aqui.
Método 3: pelo arquivo .wgetrc, de forma permanente
Se você usa o wget com proxy o tempo todo na mesma máquina, pode gravar as configurações no arquivo ~/.wgetrc, no seu diretório de usuário:
use_proxy = on
http_proxy = http://pr.proxynet.io:8000
https_proxy = http://pr.proxynet.io:8000
proxy_user = usuario
proxy_password = senhaComo o arquivo contém a senha, restrinja as permissões para que só você consiga lê-lo:
chmod 600 ~/.wgetrcSe for necessária uma configuração para todo o sistema, as mesmas linhas podem ser gravadas em /etc/wgetrc; o arquivo no diretório do usuário sobrepõe os valores do arquivo do sistema.
Se você quiser desativar o proxy temporariamente enquanto esse arquivo está definido, adicione a opção --no-proxy a um único comando:
wget --no-proxy https://httpbin.org/ip -O -Qual método escolher?
| Situação | Método recomendado |
|---|---|
| Teste rápido no terminal | Variável de ambiente |
| Em script, proxy diferente a cada chamada | Linha de comando com -e |
| Uso contínuo de proxy no servidor | .wgetrc |
| Manter determinados endereços fora do proxy | no_proxy |
| Download agendado via cron | .wgetrc (o cron não propaga variáveis de ambiente) |
| Dentro de um container Docker | Variável de ambiente (via ENV) |
Se os três métodos estiverem definidos ao mesmo tempo, a ordem de prioridade é: as opções de linha de comando sobrepõem as variáveis de ambiente, e as variáveis de ambiente sobrepõem o arquivo .wgetrc.
Como o proxy funciona em sites HTTPS?
Ao acessar um endereço HTTPS via proxy, o wget primeiro envia ao proxy uma requisição CONNECT destino:443. O proxy abre uma conexão TCP com o destino e, a partir daí, só transporta os bytes criptografados. Ou seja, o proxy não consegue ver o conteúdo do site; ele só sabe a qual domínio a conexão foi feita.
A consequência prática disso é: mesmo que o endereço do proxy comece com http://, você pode acessar sites HTTPS com segurança. A validação do certificado é feita entre a sua máquina e o site de destino; o proxy não interfere nessa validação. Comparamos esse comportamento do proxy e a diferença em relação ao SOCKS no artigo Diferença entre SOCKS e HTTP proxy.
Usando junto com opções comuns
A configuração de proxy sozinha raramente é suficiente; em trabalhos reais, você precisa de mais algumas opções. O exemplo abaixo baixa um arquivo via proxy com configurações de nova tentativa e tempo limite:
wget --timeout=30 --tries=3 --waitretry=5 \
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
-O relatorio.pdf https://example.com/relatorio.pdf--timeoutlimita o tempo de espera de cada operação de rede.--triesdefine quantas vezes tentar de novo um download que falhou;--waitretrycoloca uma espera entre as tentativas.--user-agentmuda a identidade do navegador. A identidade padrão do wget é bloqueada diretamente em alguns sites; usar um valor que se identifique é mais transparente e gera menos problemas.-Onomeia o arquivo de saída; se você adicionar-c, um download interrompido continua de onde parou.
Se a página exige cookies, as opções --load-cookies e --save-cookies mantêm a sessão em um arquivo; assim é possível manter uma sessão já autenticada junto com o proxy.
O wget suporta proxy SOCKS?
O GNU wget não tem suporte nativo a SOCKS; todos os métodos acima são para proxy HTTP e HTTPS. Se você precisa de SOCKS5, tem duas opções:
- Usar o cURL. O cURL suporta diretamente os esquemas
socks5://esocks5h://e faz praticamente tudo o que o wget faz. Mais detalhes no artigo Como usar proxy com o cURL?. - Usar uma ferramenta de redirecionamento. No Linux, ferramentas como o
proxychainsconseguem redirecionar para um proxy SOCKS as conexões de programas sem suporte nativo a SOCKS. No Windows, o Proxifier faz o mesmo trabalho.
Para pacotes que funcionam diretamente com o wget, veja a nossa página de Proxies HTTPS.
Erros comuns e suas soluções
"407 Proxy Authentication Required"
As credenciais do proxy estão faltando ou incorretas. Verifique o usuário e a senha. Se a senha tiver caracteres especiais como @, : ou #, codifique-os no endereço com codificação percentual (%40 para @) ou use as opções --proxy-user e --proxy-password, que não exigem codificação.
O comando não está usando o proxy
- Confirme que você definiu a variável com
export; apenas escreverhttp_proxy=...não a propaga para os subprocessos. - Se o endereço for HTTPS, é a variável
https_proxy, nãohttp_proxy, que precisa estar definida. - Verifique se não há uma linha
use_proxy = offno.wgetrc. - Se você está rodando
sudo wget, osudopode não propagar suas variáveis de ambiente por padrão; propague comsudo -Eou grave a configuração em/etc/wgetrc. - O endereço de destino pode estar coincidindo com um domínio da lista
no_proxy.
"Unable to establish SSL connection"
Primeiro, verifique se o endereço de destino abre sem proxy. Se o problema for de certificado, a opção --no-check-certificate pula a validação; mas essa opção enfraquece a segurança da conexão e deve ser usada só para teste. Lembre-se de que o proxy não interfere na validação de certificado: esse erro costuma vir de um repositório de certificados raiz desatualizado no sistema ou da configuração do site de destino.
A conexão está expirando
Verifique de novo o endereço e a porta do proxy. Certifique-se de que o firewall permite tráfego para a porta do proxy. Em downloads longos, definir explicitamente o tempo limite e o número de tentativas evita que os scripts travem:
wget --timeout=30 --tries=3 https://httpbin.org/ip -O -"ERROR 403: Forbidden"
O site de destino está recusando a requisição. O motivo pode não ser o proxy; o valor padrão de User-Agent do wget é bloqueado diretamente em alguns sites. Informe um valor que se identifique com --user-agent. Se o problema persistir, o site de destino pode estar reagindo ao tipo de IP do proxy; explicamos por que endereços de datacenter são recusados com mais frequência no artigo Diferença entre proxy residencial e datacenter.
Cuidados em downloads em massa
A opção -r (download recursivo) do wget consegue baixar um site inteiro com um único comando. Esse poder pode gerar uma carga séria no servidor de destino. Em downloads em massa, as opções a seguir são boas tanto para você quanto para o destino:
wget -r -l 2 --wait=2 --random-wait --limit-rate=500k \
--no-parent -A pdf https://example.com/documentos/-l 2limita a profundidade a dois níveis; profundidade ilimitada baixa o site inteiro.--wait=2coloca dois segundos entre as requisições;--random-waittorna esse intervalo aleatório.--limit-rate=500klimita a velocidade de download.--no-parentimpede subir para diretórios pai;-A pdfpega apenas as extensões indicadas.
Por padrão, o wget respeita as regras do robots.txt; não desative esse comportamento. Explicamos quais dados podem ser coletados sob quais condições no artigo A extração de dados é legal?.
Em projetos que exigem muitas requisições, distribuir os endereços com o Proxies rotativos, em vez de concentrar o tráfego em um único IP, reduz o risco de bloqueio e gera uma carga mais equilibrada no site de destino. Para necessidades mais amplas, veja nossas soluções de extração de dados.
Perguntas frequentes
wget ou cURL?
Para download de arquivos, espelhamento e captura recursiva, o wget é mais prático; para requisições de API, métodos HTTP personalizados e proxy SOCKS, o cURL é mais versátil. Os dois leem o proxy HTTP das mesmas variáveis de ambiente, então uma configuração definida uma vez funciona nas duas ferramentas.
A configuração de proxy afeta outros programas?
O proxy definido por variável de ambiente afeta todo programa iniciado no mesmo shell que lê essas variáveis (como cURL, pip, git). Os métodos .wgetrc e -e afetam apenas o wget.
Posso usar proxy sem salvar minha senha?
Sim. Se você autorizar o endereço IP do seu servidor no painel do seu provedor de proxy, não precisa de usuário e senha; o endereço é escrito apenas no formato http://servidor:porta. Para servidores com IP fixo, esse é o método mais limpo.
Posso obter um IP diferente a cada requisição com o wget?
O wget, por si só, não faz rotação. Existem dois caminhos: usar um proxy rotativo (um único endereço, um IP de saída diferente a cada conexão) ou, em um script, passar um proxy diferente a cada chamada com -e https_proxy=.
Posso baixar via FTP usando proxy?
Se a variável ftp_proxy estiver definida, o wget busca endereços FTP através de um proxy HTTP; o proxy precisa suportar esse uso. Hoje em dia, com a queda no uso de FTP, a maioria dos pacotes de proxy foca em HTTP e HTTPS.
Em resumo
Existem três formas de usar o wget com proxy: variáveis de ambiente para testes rápidos, a opção -e para uso pontual em scripts e o arquivo .wgetrc para uso contínuo. Não esqueça de definir https_proxy para endereços HTTPS, guardar as credenciais com segurança, limitar a velocidade em downloads em massa e migrar para o cURL quando precisar de SOCKS.




