Quería saber si hay alguna API estándar en Java para validar una URL determinada. Quiero comprobar si la cadena de URL es correcta, es decir, el protocolo dado es válido y luego comprobar si se puede establecer una conexión.
Intenté usar HttpURLConnection, proporcioné la URL y me conecté a ella. La primera parte de mi requisito parece cumplirse, pero cuando intento realizar HttpURLConnection.connect (), se lanza la excepción 'java.net.ConnectException: Conexión rechazada'.
¿Puede esto deberse a la configuración del proxy? Intenté configurar las propiedades del sistema para el proxy pero no tuve éxito.
Déjame saber qué estoy haciendo mal.
java
validation
url
Keya
fuente
fuente
java url validator
, de hecho, hay preguntas aquí, cómo validar la URL (mirando la cadena) y cómo verificar si la URL es accesible (a través de una conexión http, por ejemplo).Respuestas:
Para beneficio de la comunidad, ya que este hilo es el primero en Google cuando se busca
" url validator java "
La captura de excepciones es costosa y debe evitarse cuando sea posible. Si solo desea verificar que su String es una URL válida, puede usar la clase UrlValidator del proyecto Apache Commons Validator .
Por ejemplo:
fuente
Necesita crear un
URL
objeto y unURLConnection
objeto. El siguiente código probará tanto el formato de la URL como si se puede establecer una conexión:fuente
new HttpGet(url)
, puede detectar losIllegalArgumentException
HttpGet(...)
lanzamientos si hay una URL mal formada. Y también leHttpResponse
arrojará cosas si hay un problema para obtener los datos.De hecho, la
java.net.URL
clase no es en absoluto una buena forma de validar URL.MalformedURLException
se no tirado en todas las direcciones URL mal formados durante la construcción. La capturaIOException
dejava.net.URL#openConnection().connect()
no valida URL o bien, sólo cuentan tiempo o no se puede establecer la conexión.Considere este fragmento de código:
..que no arroja ninguna excepción.
Recomiendo usar alguna API de validación implementada usando una gramática libre de contexto, o en una validación muy simplificada, simplemente use expresiones regulares. Sin embargo, necesito que alguien sugiera una API superior o estándar para esto, solo recientemente comencé a buscarla yo mismo.
Nota Se ha sugerido que
URL#toURI()
en combinación con el manejo de la excepciónjava.net. URISyntaxException
puede facilitar la validación de URL. Sin embargo, este método solo detecta uno de los casos muy simples anteriores.La conclusión es que no existe un analizador de URL estándar de Java para validar las URL.
fuente
Utilizando solo una API estándar, pase la cadena a un
URL
objeto y luego conviértala en unURI
objeto. Esto determinará con precisión la validez de la URL de acuerdo con el estándar RFC2396.Ejemplo:
fuente
Utilice el
android.webkit.URLUtil
en Android:Nota: es solo verificar el esquema inicial de la URL, no que toda la URL sea válida.
fuente
Existe una forma de realizar la validación de URL estrictamente de acuerdo con los estándares en Java sin recurrir a bibliotecas de terceros:
El constructor de
URI
verifica queurl
sea un URI válido, y la llamada aparseServerAuthority
asegura que sea un URL (absoluto o relativo) y no un URN.fuente
URI
llamada al constructor y laparseServerAuthority
llamada valida la URL, noparseServerAuthority
solo.://
viene después del host,:
introduce el número de puerto, que puede estar vacío según la sintaxis.//
es una parte de la ruta con un segmento vacío, que también es válido. Si ingresa esta dirección en su navegador, intentará abrirla (pero lo más probable es que no encuentre el servidor llamadohttps
;)).Solo es importante señalar que el objeto URL maneja tanto la validación como la conexión. Entonces, solo los protocolos para los que se ha proporcionado un controlador en sun.net.www.protocol están autorizados ( archivo , ftp , gopher , http , https , jar , mailto , netdoc ) son válidos. Por ejemplo, intente crear una nueva URL con el protocolo ldap :
Obtendrá un
java.net.MalformedURLException: unknown protocol: ldap
.Necesita implementar su propio controlador y registrarlo
URL.setURLStreamHandlerFactory()
. Bastante exagerado si solo desea validar la sintaxis de la URL, una expresión regular parece ser una solución más simple.fuente
¿Está seguro de que está utilizando el proxy correcto como propiedades del sistema?
Además, si está utilizando 1.5 o 1.6, puede pasar una instancia de java.net.Proxy al método openConnection (). Esto es más elegante en mi opinión:
fuente
Creo que la mejor respuesta es del usuario @ b1nary.atr0phy. De alguna manera, recomiendo combinar el método de la respuesta b1nay.atr0phy con una expresión regular para cubrir todos los casos posibles.
fuente
"((http|https|ftp)://)?((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"
( fuente ). El único inconveniente de esta expresión regular es que, por ejemplo, "127.0..0.1" y "127.0" son válidos.Gracias. Abrir la conexión URL pasando el Proxy como lo sugiere NickDK funciona bien.
Sin embargo, las propiedades del sistema no funcionan como mencioné anteriormente.
Gracias de nuevo.
Saludos, Keya
fuente