Como diagnosticar a causa de uma taxa de sucesso baixa: guia passo a passo
Taxa de sucesso é o percentual de requisições bem-sucedidas do número total de tentativas. Quando esse indicador cai abaixo do normal, você perde dinheiro, tempo e dados. Mas pode haver dezenas de causas: desde configuração incorreta até bloqueios do servidor de destino. Neste artigo, vamos analisar uma abordagem sistemática para diagnóstico e encontrar a solução.
O que é taxa de sucesso e qual é a norma
Taxa de sucesso (SR) = (Requisições bem-sucedidas / Número total de requisições) × 100%
Os valores normais dependem do tipo de tarefa:
| Tarefa | SR Normal | Nível Crítico |
|---|---|---|
| Análise de dados públicos | 95–99% | abaixo de 85% |
| Automação SMM | 90–97% | abaixo de 80% |
| Verificação de anúncios | 98–99.5% | abaixo de 95% |
| Integração de API | 99–99.9% | abaixo de 98% |
Se a SR caiu 5–10% da sua linha de base — este é um sinal para diagnóstico. Se caiu 20%+ — ações urgentes são necessárias.
Primeiros passos do diagnóstico
Passo 1: Verifique logs e métricas
Colete dados dos últimos 24–72 horas:
- Quando exatamente a SR caiu? (hora exata)
- Qual percentual de requisições retorna erro 407 (Proxy Authentication Required)?
- Qual percentual — 429 (Too Many Requests)?
- Qual percentual — timeouts (connection timeout)?
- A carga mudou (RPS — requisições por segundo)?
Passo 2: Teste isoladamente
Use um script simples para verificar o proxy sem sua aplicação:
import requests
import time
proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"
success = 0
failed = 0
for i in range(100):
try:
response = requests.get(
target_url,
proxies=proxies,
timeout=10,
verify=False
)
if response.status_code == 200:
success += 1
print(f"✓ Tentativa {i+1}: sucesso")
else:
failed += 1
print(f"✗ Tentativa {i+1}: status {response.status_code}")
except Exception as e:
failed += 1
print(f"✗ Tentativa {i+1}: {str(e)}")
time.sleep(0.5)
sr = (success / (success + failed)) * 100
print(f"\nTaxa de Sucesso: {sr:.1f}%")
print(f"Bem-sucedidas: {success}, Erros: {failed}")
Se este teste mostrar SR normal — o problema está no seu código ou configuração. Se a SR for baixa mesmo aqui — o problema está no proxy ou no servidor de destino.
Problemas do lado do proxy
Erro 407: Proxy Authentication Required
Causas:
- Credenciais incorretas (login/senha)
- Conta expirada
- Endereço IP não está na lista branca (se necessário)
- Rotação de IP não funciona ou está desativada
Solução:
import requests
# Formato correto para proxies residenciais
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}
# Teste
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)
Sobrecarga do servidor proxy
Se todos os usuários do serviço estão enviando uma enorme quantidade de requisições simultaneamente, pode haver limitação por RPS (requisições por segundo). Isso é raro, mas acontece.
Verifique:
- Seu RPS atual no pico
- Limites do seu plano
- Se há erros 429 nos logs
Solução: adicione atraso entre requisições ou atualize seu plano.
Qualidade dos endereços IP
Para proxies residenciais uma SR baixa pode significar que você está recebendo endereços bloqueados. Verifique:
- Qual percentual de endereços IP retorna 403 Forbidden?
- Os mesmos endereços se repetem?
- Há um padrão — um país/região funciona, outro não?
Bloqueios e filtros do servidor de destino
Erro 429: Too Many Requests
O servidor de destino vê muitas requisições de um IP ou em geral. Soluções:
- Adicione atraso: `time.sleep(random.uniform(1, 3))`
- Use rotação de IP: cada requisição — novo IP
- Reduza RPS: envie requisições sequencialmente, não em paralelo
- Adicione headers realistas: User-Agent, Referer, Accept-Language
Erro 403 Forbidden
O servidor bloqueou seu IP (ou o IP do proxy). Isso pode ser:
- Filtro por geolocalização
- Lista negra de serviços proxy
- Detector de bot (JavaScript, CAPTCHA)
Solução: use proxies móveis ou proxies residenciais com rotação. Eles são mais difíceis de bloquear.
Erro 403: Verificação de User-Agent
Alguns serviços rejeitam requisições com User-Agent suspeito:
import requests
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]
headers = {
"User-Agent": random.choice(user_agents),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
"Referer": "https://google.com"
}
response = requests.get(
"https://target-site.com",
headers=headers,
proxies={"http": proxy, "https": proxy},
timeout=10
)
print(response.status_code)
Erros no código do cliente
Tratamento incorreto de exceções
Erro comum: o código trata um erro de conexão como uma requisição falhada, mas não tenta reconectar:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Forma correta com retries
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
print(f"Erro: {e}")
# Registre e passe para a próxima requisição
Timeouts incorretos
Se o timeout for muito curto (1–2 segundos), proxies lentos serão rejeitados:
- Para análise comum: 10–30 segundos
- Para proxies móveis: 15–45 segundos
- Para API: 5–10 segundos
Erros SSL/TLS
Se você usar `verify=False`, isso pode mascarar problemas reais. É melhor atualizar certificados:
import requests
import certifi
# Correto
response = requests.get(
url,
proxies=proxies,
verify=certifi.where(), # Em vez de verify=False
timeout=15
)
Problemas de rede e timeouts
Connection timeout vs Read timeout
A diferença é importante:
- Connection timeout: proxy não responde (problema com proxy ou rede)
- Read timeout: servidor de destino envia dados lentamente (problema do servidor de destino)
import requests
# timeout = (connection_timeout, read_timeout)
try:
response = requests.get(
url,
proxies=proxies,
timeout=(5, 15) # 5 seg para conectar, 15 para ler
)
except requests.exceptions.ConnectTimeout:
print("Proxy não responde")
except requests.exceptions.ReadTimeout:
print("Servidor de destino é lento")
Problemas de DNS
Se o servidor de destino não resolver, este não é um erro de proxy:
import socket
# Verifique DNS fora do proxy
try:
ip = socket.gethostbyname("target-site.com")
print(f"Resolvido: {ip}")
except socket.gaierror:
print("Erro de DNS — site não encontrado")
Checklist de diagnóstico de SR baixa
- Estabeleça a linha de base: qual era a SR normal antes?
- Execute teste isolado (script acima) com 100 requisições
- Verifique logs: quais códigos HTTP dominam? (407, 429, 403, timeouts?)
- Se 407: verifique login/senha e lista branca de IP
- Se 429: adicione atraso entre requisições, use rotação de IP
- Se 403: verifique User-Agent, Referer, adicione headers realistas
- Se timeouts: aumente timeout, verifique RPS, use lógica de retry
- Verifique seu código: tratamento correto de exceções, timeouts corretos
- Verifique servidor de destino: está acessível diretamente (sem proxy)?
- Se nada mais funcionar: tente outro tipo de proxy ou outro provedor
Tabela de diagnóstico rápido
| Código HTTP | Causa Provável | Solução |
|---|---|---|
| 407 | Credenciais de proxy incorretas | Verifique login/senha, lista branca de IP |
| 429 | Muitas requisições | Adicione atraso, use rotação de IP |
| 403 | IP bloqueado ou detector de bot | Adicione headers realistas, use proxies móveis |
| Timeout | Proxy lento ou servidor de destino sobrecarregado | Aumente timeout, verifique RPS |
| Connection refused | Servidor proxy inacessível | Verifique IP:port, status do proxy |
Conclusão
Taxa de sucesso baixa é um sintoma, não uma doença. Pode haver muitas causas: desde um erro de digitação no código até bloqueio pelo servidor de destino. O diagnóstico sistemático é a chave para a solução:
- Verifique métricas e logs
- Isole o problema (proxy vs servidor de destino vs seu código)
- Determine o tipo de erro (407, 429, 403, timeout)
- Aplique a solução correspondente
Para tarefas que exigem confiabilidade e SR alta, recomendamos proxies residenciais com rotação de IP. Eles são mais difíceis de detectar e mais estáveis. Tente um teste gratuito em proxycove.com e teste em sua tarefa.