Como resolver problemas de autenticação de proxy: um guia completo
Código 407, redefinição de conexão, timeout ao conectar — sintomas familiares? Erros de autenticação de proxy ocorrem constantemente, mas em 90% dos casos são resolvidos em poucos minutos. Vamos analisar as causas e mostrar métodos concretos de diagnóstico.
Como funciona a autenticação de proxy
Antes de procurar o erro, é importante entender o mecanismo. Os servidores proxy usam dois métodos principais de autenticação:
Autenticação por login e senha (Basic Auth) — o cliente envia o cabeçalho Proxy-Authorization com as credenciais codificadas em Base64. Este é o método padrão para proxies HTTP.
Autenticação por IP (IP Whitelist) — o servidor verifica o endereço IP do cliente em uma lista de permissões. Sem logins — se o seu IP estiver na lista, o acesso é concedido.
Para proxies SOCKS5, o esquema é semelhante, mas a autenticação ocorre no nível do protocolo, e não através de cabeçalhos HTTP.
Erros comuns e seus significados
| Erro | O que significa | Causa provável |
|---|---|---|
407 Proxy Authentication Required |
O proxy exige autorização | Credenciais não fornecidas ou incorretas |
403 Forbidden |
Acesso negado | IP não está na lista de permissões, assinatura expirada |
Connection reset |
Conexão redefinida | Protocolo incorreto, bloqueio por firewall |
Connection timeout |
Tempo limite de conexão | Host/porta incorretos, problemas de rede |
SOCKS5 auth failed |
Falha na autenticação SOCKS | Dados incorretos ou método incompatível |
Problemas com credenciais
A causa mais comum do erro 407 é um erro de digitação ou confusão com os dados. Verifique:
- Cópia com espaços — ao copiar do painel de controle, muitas vezes são capturados espaços invisíveis no início ou fim da string
- Sensibilidade a maiúsculas/minúsculas — logins e senhas diferenciam maiúsculas de minúsculas
- Confusão de contas — os dados da área do cliente e os dados do proxy geralmente são diferentes
- Prazo de validade expirado — a assinatura terminou, mas os dados ainda parecem válidos
Teste rápido — tente se autenticar via curl:
curl -v -x http://user:password@proxy.example.com:8080 https://httpbin.org/ip
O sinalizador -v mostrará todo o processo de conexão, incluindo a resposta do servidor proxy.
Lista de permissão de IP: armadilhas
A autenticação por IP parece conveniente — não é preciso enviar senhas no código. Mas existem suas próprias armadilhas:
IP dinâmico do provedor. Provedores de internet residencial mudam o IP ao reconectar o roteador ou em um cronograma. Funcionava ontem, hoje dá 403.
NAT e IP compartilhado. Se você estiver atrás de um NAT corporativo, seu IP externo é compartilhado por dezenas de colegas. Adicionar tal IP à lista de permissões é uma falha de segurança.
VPNs e servidores em nuvem. O IP do seu VPS pode mudar durante a migração ou reinicialização. AWS, Google Cloud e outros provedores não garantem IP estático sem um IP Elástico/Estático.
Como descobrir seu IP externo atual:
curl https://api.ipify.org
# ou
curl https://ifconfig.me
Compare o resultado com o IP na lista de permissões do provedor de proxy.
Codificação e caracteres especiais na senha
Se a senha contiver caracteres especiais (@, :, #, %), eles podem quebrar o formato URL do proxy. O caractere @ é especialmente traiçoeiro — ele separa as credenciais do host.
Exemplo de problema: a senha p@ss:word na string http://user:p@ss:word@proxy.com:8080 será analisada incorretamente.
Solução — Codificação URL de caracteres especiais:
| Caractere | Codificação |
|---|---|
@ |
%40 |
: |
%3A |
# |
%23 |
% |
%25 |
/ |
%2F |
A senha p@ss:word se transforma em p%40ss%3Aword.
Em Python, a codificação é feita automaticamente:
from urllib.parse import quote
password = "p@ss:word"
encoded_password = quote(password, safe='')
print(encoded_password) # p%40ss%3Aword
Diagnóstico passo a passo
Quando o proxy não funciona, verifique em ordem:
Passo 1: Verifique a acessibilidade do servidor
# Verificação de conexão TCP
nc -zv proxy.example.com 8080
# Ou via telnet
telnet proxy.example.com 8080
Se a conexão não for estabelecida, o problema está no nível da rede: host ou porta incorretos, ou firewall.
Passo 2: Teste a autenticação sem o aplicativo
# Proxy HTTP
curl -v --proxy-user "username:password" -x http://proxy.example.com:8080 https://httpbin.org/ip
# Proxy SOCKS5
curl -v --proxy-user "username:password" -x socks5://proxy.example.com:1080 https://httpbin.org/ip
Se o curl funcionar, mas seu aplicativo não — o problema está no código ou na configuração do aplicativo.
Passo 3: Verifique o protocolo
Um erro comum é usar um cliente HTTP para um proxy SOCKS ou vice-versa. Confirme o tipo de proxy com o provedor:
- Proxy HTTP/HTTPS — funciona através de cabeçalhos, portas geralmente 8080, 3128, 8888
- SOCKS4/SOCKS5 — protocolo binário, portas geralmente 1080, 1081
Passo 4: Verifique os logs do provedor
Muitos provedores exibem logs de conexão na área pessoal. Lá você pode ver: se a solicitação chegou ao servidor, quais credenciais foram enviadas e por que foi rejeitada.
Exemplos de código para diferentes linguagens
Python (requests)
import requests
from urllib.parse import quote
# Efetua a codificação de caracteres especiais na senha
username = "user123"
password = quote("p@ss:word", safe='')
proxies = {
"http": f"http://{username}:{password}@proxy.example.com:8080",
"https": f"http://{username}:{password}@proxy.example.com:8080"
}
try:
response = requests.get(
"https://httpbin.org/ip",
proxies=proxies,
timeout=10
)
print(response.json())
except requests.exceptions.ProxyError as e:
print(f"Erro de proxy: {e}")
Python (aiohttp para requisições assíncronas)
import aiohttp
import asyncio
from aiohttp_socks import ProxyConnector
async def fetch_with_proxy():
# Para SOCKS5
connector = ProxyConnector.from_url(
'socks5://user:password@proxy.example.com:1080'
)
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('https://httpbin.org/ip') as response:
return await response.json()
# Para proxy HTTP
async def fetch_with_http_proxy():
async with aiohttp.ClientSession() as session:
async with session.get(
'https://httpbin.org/ip',
proxy='http://user:password@proxy.example.com:8080'
) as response:
return await response.json()
Node.js (axios)
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const proxyUrl = 'http://user:password@proxy.example.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);
axios.get('https://httpbin.org/ip', {
httpsAgent: agent
})
.then(response => console.log(response.data))
.catch(error => {
if (error.response?.status === 407) {
console.log('Erro de autenticação de proxy');
}
});
PHP (cURL)
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://httpbin.org/ip',
CURLOPT_PROXY => 'proxy.example.com:8080',
CURLOPT_PROXYUSERPWD => 'user:password',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
echo 'Erro: ' . curl_error($ch);
} elseif ($httpCode === 407) {
echo 'Erro de autenticação de proxy';
} else {
echo $response;
}
curl_close($ch);
Selenium (Python)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Para proxy com autenticação no Selenium, é necessário um plugin
# A opção simples é usar um proxy com lista de permissões de IP
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://proxy.example.com:8080')
# Para autenticação via extensão
# (requer a criação de manifest.json e background.js)
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
Dica: O Selenium funciona mal com proxies que exigem login/senha. Para automação de navegador, é melhor usar proxies residenciais com autenticação por IP — isso evitará problemas com janelas pop-up de autenticação.
Características de diferentes tipos de proxy
Os problemas de autenticação podem depender do tipo de proxy:
Proxies de data center geralmente usam credenciais estáticas. Se pararem de funcionar, verifique a validade ou o limite de tráfego.
Proxies residenciais frequentemente usam rotação. As credenciais podem incluir parâmetros de sessão no login (por exemplo, user-session-abc123). O formato incorreto é a causa dos erros.
Proxies móveis podem exigir parâmetros adicionais para troca de IP. Consulte a documentação do provedor — o formato das solicitações de rotação é diferente.
Lista de verificação para diagnóstico rápido
Salve esta lista para problemas futuros:
- O ping/telnet para o host e porta do proxy funciona?
- As credenciais foram copiadas sem espaços extras?
- Os caracteres especiais na senha foram codificados?
- O protocolo correto está sendo usado (HTTP vs SOCKS)?
- O IP foi adicionado à lista de permissões (se a autenticação por IP for usada)?
- A assinatura está ativa e o limite não foi excedido?
- O curl com as mesmas credenciais funciona?
Conclusão
A maioria dos erros de autenticação de proxy é resolvida verificando itens básicos: correção das credenciais, codificação de caracteres especiais, correspondência do IP na lista de permissões. Se as verificações simples não ajudarem — use o curl com o sinalizador -v para um diagnóstico detalhado.
Para tarefas de raspagem (scraping) e automação onde a estabilidade da conexão é crucial, é mais conveniente usar proxies residenciais com um sistema de autenticação flexível — mais detalhes em proxycove.com.