2008-11-13 11 views
10

El método equals() de la clase URL de la biblioteca de clases Java realiza una solicitud de DNS para obtener la IP para el nombre de host, para verificar la igualdad de las dos direcciones IP. Esto sucede incluso para las URL que se crean desde el mismo String. ¿Hay alguna manera de evitar este acceso a internet?Cómo evitar, que URL.equals necesita acceso a internet en Java?

Respuesta

18

Uso java.net.URI en lugar de la URL.

+2

Y, por supuesto, esto también tiene sentido semántico, porque desea comparar los Identificadores en lugar de las Ubicaciones – Gareth

1

No utilice URL.equals. Como dice la documentación,

Nota: Se sabe que el comportamiento definido para equals es incoherente con el alojamiento virtual en HTTP.

+0

¿Cómo debo probar la igualdad? – Mnementh

+2

Puede usar toString() o to ExternalForm() para obtener el formulario externo y compararlos. Las pruebas preliminares aquí muestran que no tiene acceso al DNS. –

+0

Acabo de votar la respuesta de Bill. Simplemente llame aURI() en sus objetos de URL. –

3

Si sólo quiere comparar las cadenas URL, intente

url1.toString().equals(url2.toString()) 
+0

Las dos cadenas podrían ser muy diferentes pero apuntan al mismo recurso. –

+2

Si desea verificar el recurso al que hace referencia una URL, obviamente necesita acceso a Internet. Por lo tanto, asumí que él quería comparar las urls. De ahí mi calificación de "si solo quieres comparar las cadenas de URL". – Rick

Cuestiones relacionadas