Como corrigir o erro ERR_TUNNEL_CONNECTION_FAILED com proxy
Atualizado:
Para carregar uma página https:// por meio de um proxy, o navegador envia uma requisição CONNECT e aguarda o proxy abrir um túnel até o site. O erro ERR_TUNNEL_CONNECTION_FAILED ocorre quando o proxy responde a essa requisição com um erro em vez de aceitá-la. O problema é que o Chrome não informa qual foi o erro, então o primeiro passo é descobrir o código real.
Dois casos que reproduzimos
Ambos foram executados em um proxy de teste, representado aqui com o endereço de documentação 203.0.113.10:8080 e user123:pass456. Em uma janela normal do Chrome, o caso do 407 não vira um erro de túnel; em vez disso, o Chrome abre uma caixa de diálogo para inserir o usuário e a senha do proxy. Por isso, erros de túnel causados por 407 aparecem principalmente em ferramentas de automação e aplicativos que não exibem solicitação de senha.
| O proxy responde ao CONNECT com | O Chrome exibe | O curl exibe |
|---|---|---|
407 sem opção de inserir senha (Chrome headless) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 porque o proxy não consegue acessar o site | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Causas mais prováveis, em ordem
- Um script de automação não envia credenciais. O parâmetro
--proxy-serverdo Chrome aceita apenas host e porta, não user:pass. O Puppeteer ou Selenium em modo headless recebe um 407 e relata falha no túnel. - Um aplicativo de celular usando um proxy Wi-Fi protegido por senha. O app não tem caixa de diálogo de login, fazendo com que conexões HTTPS falhem enquanto o navegador continua funcionando.
- O proxy não consegue acessar o destino. Ele retorna 502 para o CONNECT; a página sobre 502 Bad Gateway aborda isso detalhadamente.
- Apenas alguns sites falham. O destino está bloqueando o acesso ou fora do ar, enquanto outros sites funcionam normalmente pelo mesmo proxy.
Descubra o código real com um comando curl
Execute curl -v -x http://user123:[email protected]:8080 https://example.com com os seus próprios valores. Veja a linha logo após > CONNECT example.com:443 HTTP/1.1: um 407 indica que você deve seguir o guia do erro 407; já um 502 aponta para problemas no destino ou na rota após o proxy. Se preferir não usar o terminal, cole a linha no verificador de proxy, que relata auth failed (407) ou HTTP 502 para as mesmas situações.
Soluções por ambiente
- Puppeteer: mantenha
--proxy-server=http://host:portna inicialização e chamepage.authenticate({ username, password })antes de navegar. Veja o exemplo completo no guia de proxy para Puppeteer. - Playwright: passe
proxy: { server, username, password }ao iniciar o navegador e o Playwright responderá ao 407 por você; veja o guia do Playwright. - Selenium: o Chrome não aceita user:pass pela linha de comando; o guia do Selenium mostra alternativas viáveis.
- Chrome no Windows: se a caixa de diálogo de login nunca aparecer, verifique se alguma extensão de proxy a está bloqueando e tente novamente em uma janela sem extensões.
- Celulares: para aplicativos que exigem um proxy autenticado, use um app de proxy com suporte a user:pass, conforme descrito no guia de configuração para Android.
Passo a passo
- 1
Identifique a resposta ao CONNECT
Execute
curl -v -xcom a sua linha de proxy ou cole-a no verificador para descobrir se o proxy retorna 407 ou 502. - 2
Para 407: forneça as credenciais corretamente
Em scripts, use o método de autenticação da biblioteca em vez de incluir user:pass no parâmetro
--proxy-server. - 3
Para 502: teste outro site
Acesse um site grande como example.com pelo mesmo proxy. Se funcionar, o problema está no destino original.
- 4
Execute novamente e confirme o IP de saída
Assim que o túnel for aberto, acesse meu IP no mesmo navegador para confirmar que o tráfego está passando pelo proxy.
Perguntas frequentes
Por que páginas http carregam enquanto páginas https falham?
O tráfego http comum não precisa de CONNECT; o proxy apenas encaminha a requisição diretamente. Somente o https abre um túnel, portanto erros de túnel só acontecem nele.
O que causa o ERR_TUNNEL_CONNECTION_FAILED no Android?
Geralmente é um aplicativo que não consegue enviar usuário e senha para um proxy Wi-Fi. Acesse a mesma página no Chrome para Android; se o Chrome solicitar o login e carregar o site, a falha está no app.
Posso colocar user:pass dentro de --proxy-server?
Não. O Chrome ignora credenciais nessa flag, o que resulta em um 407 e no erro de túnel. Em vez disso, faça a autenticação pelo Puppeteer, Playwright ou por uma extensão.
Mudar para SOCKS5 elimina o erro de túnel?
Apenas se o seu plano for SOCKS5. A VinaProxy oferece tanto HTTP(S) quanto SOCKS5; escolha o protocolo indicado para o seu plano no painel, já que protocolos divergentes causam outros erros.
Proxies compatíveis com Puppeteer e Playwright
Os proxies da VinaProxy usam autenticação padrão por user:pass, compatível nativamente com as bibliotecas de automação mais populares.
Ver preços