Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Como lidar com o erro MaxRetryError da urllib3 no Python

#pythonurllib3; #tratamentodeerros; #automatizacaoweb

Como lidar com o erro MaxRetryError da urllib3 no Python

O erro urllib3.exceptions.MaxRetryError geralmente ocorre quando o Python não consegue estabelecer uma conexão com um servidor, mesmo após múltiplas tentativas. Este erro indica que todas as tentativas de conexão foram esgotadas sem sucesso.

Entendendo o erro MaxRetryError no Python

Esse tipo de erro aparece comumente ao usar bibliotecas que fazem requisições HTTP, como urllib3, especialmente em aplicações que dependem de servidores locais ou APIs externas. O trecho abaixo é um exemplo da mensagem que pode ser exibida:

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=40215): Max retries exceeded with url: /session/b681ad139c56b8cebff586822d3f7064/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f4f210e4d60>: Failed to establish a new connection: [Errno 111] Connection refused'))

Esse erro indica que seu código tentou acessar o servidor na porta 40215, mas não conseguiu se conectar. Isso pode acontecer por diversos motivos, como:

  • O servidor não estar ativo ou disponível no momento.
  • Porta incorreta especificada na URL.
  • Firewalls ou antivírus bloqueando a conexão local.
  • Problemas de rede ou configurações no ambiente de desenvolvimento.

Exemplo prático com tratamento de exceção

Veja abaixo um exemplo de como capturar a exceção MaxRetryError e tentar novamente a conexão automaticamente por até 10 vezes, com intervalo de 1 minuto entre as tentativas:

import time
import urllib3

# define o número máximo de tentativas
max_attempts = 10

for i in range(max_attempts):
    try:
        # tenta estabelecer uma conexão com o servidor
        http = urllib3.PoolManager()
        response = http.request('GET', 'http://localhost:40215/session/b681ad139c56b8cebff586822d3f7064/url')
        # se a conexão for bem-sucedida, sai do loop
        break
    except urllib3.exceptions.MaxRetryError:
        print(f"Tentativa {i+1} falhou. Aguardando 1 minuto...")
        for j in range(60, 0, -1):
            print(f"\rTentativa {i+1} em {j} segundos.", end="")
            time.sleep(1)
        print("")

# verifica se a conexão foi bem-sucedida
if 'response' in locals() and response.status == 200:
    print("Conexão estabelecida com sucesso!")
else:
    print("Não foi possível estabelecer a conexão.")

Dicas importantes ao usar urllib3

  • Verifique se o servidor local realmente está rodando e escutando na porta especificada.
  • Use ferramentas como netstat ou curl para testar a conexão local manualmente.
  • Considere configurar o número máximo de tentativas e o tempo de espera padrão com Retry da própria biblioteca urllib3.

Imagem ilustrativa

@CanalQb

Links úteis

Vídeo recomendado

Assista ao conteúdo em vídeo sobre erros e automações Python no canal @CanalQb:
@CanalQb no YouTube

Conclusão

O erro MaxRetryError pode ser frustrante, mas com o tratamento adequado, é possível garantir mais estabilidade e resiliência para seus scripts Python. Com abordagens como a repetição programada e verificação de disponibilidade do servidor, você melhora a confiabilidade das automações web que dependem de conexões HTTP.

Postar um comentário

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo