Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Aplicação startswith e endswith

Criei 2 ifs dentro do valida_url, no caso de a url não começar com "https://", adicionei automaticamente, não gerando erro nenhum.

    def valida_url(self):
        if not self.url:
            raise ValueError("A URL está vazia!")

        if not self.get_url_base().endswith("/cambio"):
            raise ValueError("URL inválida!")

        if not self.get_url_base().startswith("https://"):
            self.url = "https://" + self.url

Obrigado,

2 respostas
solução!

Olá, Bruno!

Pelo que entendi, você está utilizando os métodos startswith e endswith da classe str em Python para validar URLs. Isso é uma ótima prática, pois ajuda a garantir que a URL esteja no formato esperado.

No entanto, notei que você está adicionando "https://" à URL caso ela não comece com essa string. Isso pode ser problemático se a URL original começar com "http://", pois você estará adicionando "https://" no início, resultando em "https://http://restodaurl".

Uma solução para isso seria verificar se a URL começa com "http://" ou "https://", e adicionar "https://" apenas se nenhuma dessas condições for atendida. Aqui está um exemplo de como você poderia fazer isso:

def valida_url(self):
    if not self.url:
        raise ValueError("A URL está vazia!")

    if not self.get_url_base().endswith("/cambio"):
        raise ValueError("URL inválida!")

    if not (self.get_url_base().startswith("https://") or self.get_url_base().startswith("http://")):
        self.url = "https://" + self.url

Dessa forma, você está garantindo que a URL comece com "http://" ou "https://", e não está adicionando "https://" a URLs que já começam com "http://".

Espero ter ajudado e bons estudos!

Oi pessoal. Tudo bem?

Bruno, Gostei da sua sugestão de adicionar a condição para acrescentar o 'http://' ou 'https://' quando a url informada não conter um dos dois parâmetros. A sugestão do Matheus é um complemento que vale a pena você implementar.

Porém, achei estranho por que mesmo da forma como você escreveu, o erro deveria estar refletindo quando o 'http' não for passado. Você verificou se está testando a condição que reflete essa alteração no código?

Veja que para que o ValueError persista, você deve mudar a sua URL na chamada do método:

Aqui:

extrator_url = ExtratorURL('http://bytebank.com/?quantidade=100&moedaOrigem=real&moedaDestino=dolar')

Você pode testar alterando para, por exemplo:

extrator_url = ExtratorURL('testeteste/bytebank.com/?quantidade=100&moedaOrigem=real&moedaDestino=dolar')

Será que é isso?