
1. Rotação com contagem de falhas
import collections, itertools, requests
proxies = [l.strip() for l in open("proxies.txt") if l.strip()]
failures = collections.Counter()
pool = itertools.cycle(proxies)
def get(url, attempts=10):
for _ in range(attempts):
proxy = next(pool)
if failures[proxy] >= 3:
continue
try:
return requests.get(
url,
proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
timeout=8,
)
except requests.RequestException:
failures[proxy] += 1
raise RuntimeError("pool exhausted")Observações que poupam tempo
Contar falhas por proxy e pular os reincidentes é o que transforma uma lista crua em um pool utilizável; sem isso você segue pagando o timeout das mesmas entradas mortas. Atualize o arquivo na cadência de publicação e zere o contador ao fazer isso. Para cargas de produção em que essa taxa de falha é inaceitável, um endpoint rotativo mantido é a ferramenta certa.
Guias relacionados
Limites do snapshot público
Proxies públicos gratuitos são compartilhados e operados por terceiros desconhecidos. Nunca envie senhas, tokens ou dados pessoais por eles. Siga as políticas de uso aceitável do GitHub: nada de spam, ataques, contorno de controles de acesso ou coleta contrária às políticas do site.
Proxies públicos gratuitos são compartilhados e operados por terceiros desconhecidos. Nunca envie senhas, tokens ou dados pessoais por eles. Siga as políticas de uso aceitável do GitHub: nada de spam, ataques, contorno de controles de acesso ou coleta contrária às políticas do site.