Qual é a melhor maneira de verificar se um URL é válido em Java?
Se tentou ligar new URL(urlString)
e pegar um MalformedURLException
, mas parece estar feliz com qualquer coisa que comece http://
.
Não estou preocupado em estabelecer uma conexão, apenas validade. Existe um método para isso? Uma anotação no Hibernate Validator? Devo usar um regex?
Editar: Alguns exemplos de URLs aceitos são http://***
e http://my favorite site!
.
java
validation
url
Eric Wilson
fonte
fonte
URL
construtor aceita?http://***
" funciona. "http://my favorite site!
" funciona. Não consigo fazer uma exceção (quando http: // está no início)Respostas:
Considere o uso da classe Apache Commons UrlValidator
Existem várias propriedades que você pode definir para controlar a forma como este se comporta de classe, por padrão
http
,https
eftp
são aceitos.fonte
local
, etc.new URL(name).toURI()
se tornou a solução.Esta é a maneira que experimentei e achei útil,
fonte
URL u = new URL(http://google).toURI();
não lançará uma exceção.new URL(http://google)
seja válido ^^ temos muitos domínios internos em minha empresa como esteEu adoraria postar isso como um comentário à resposta de Tendayi Mawushe , mas infelizmente não há espaço suficiente;)
Esta é a parte relevante da fonte UrlValidator do Apache Commons :
Você pode facilmente construir seu próprio validador a partir daí.
fonte
A maneira mais "infalível" é verificar a disponibilidade do URL:
fonte
Minha abordagem favorita, sem bibliotecas externas:
fonte
A julgar pelo código-fonte de
URI
, oo construtor faz mais validação do que os outros construtores. Você pode tentar aquele, mas YMMV.
fonte
Eu não gostei de nenhuma das implementações (porque eles usam um Regex que é uma operação cara, ou uma biblioteca que é um exagero se você só precisa de um método), então acabei usando a classe java.net.URI com alguns verificações extras e limitar os protocolos a: http, https, file, ftp, mailto, news, urn.
E sim, detectar exceções pode ser uma operação cara, mas provavelmente não tão ruim quanto as expressões regulares:
fonte
pacote validador:
Parece haver um bom pacote de Yonatan Matalon chamado UrlUtil . Citando sua API:
Abordagem da Sun - verifique o endereço de rede
O site Java da Sun oferece tentativa de conexão como uma solução para validação de URLs.
Outros snippets de código regex:
Existem tentativas de validação de regex no site da Oracle e weberdev.com .
fonte