2011-01-29 13 views
7

Mi aplicación tiene acceso a información en la web, durante mi desarrollo ¿cómo simulo que un sitio está inactivo en Java? Si la URL me lleva a la página, mi aplicación la procesa, pero si un sitio, por algún motivo, está temporalmente inactivo o incluso si el sitio está activo, pero la URL devuelve información no válida o la conexión a Internet está deshabilitada, ¿cómo puede La aplicación Java distingue esas situaciones? ¿Y ser capaz de decir qué está ocurriendo?¿Cómo simular un sitio en Java?

Editar: Estoy tratando de escribir mi aplicación Java para que cuando se encuentre con diferentes accesos a la url, sepa en qué caso se trata y diga al usuario en consecuencia.

+0

¿Podría aclarar su pregunta, por favor? ¿Estás intentando probar el comportamiento de tu aplicación cuando intenta y no puede llegar a un sitio externo? ¿Estás tratando de escribir código que maneje algún tipo diferente de caso de falla? –

Respuesta

0

Si un sitio está desactivado será un código 404 y se lanzará un java.net.UnknownHostException. Tendrá que atraparlo o atraparlo como IOException. Para otros códigos de estado, puede leerlos usando el siguiente fragmento de código. Puede ver una lista de HTTP status codes aquí.

Usted puede leer el código de respuesta de esta manera.

URL url = new URL ("http://someurl.doesnotexist.com"); 
    URLConnection connection = url.openConnection(); 
    connection.connect(); 
    HttpURLConnection httpConnection = (HttpURLConnection) connection; 
    int code = httpConnection.getResponseCode(); 
    //do something with the code 
+4

Si el sitio está inactivo significa que el servidor web está inactivo y no se está ejecutando. Obviamente no puede responder con un código 404 si no se está ejecutando en absoluto. – Progman

+0

Obviamente. En ese caso, recibirá una excepción. El código anterior es solo un fragmento rápido ... deberán estar rodeados por try catch de IOException. El 404 quedará atrapado en esa excepción. Editaré mi respuesta para aclarar esa parte. Por favor, elimine el voto negativo si cree que la respuesta está satisfecha después de la votación. – CoolBeans

+1

@Progman: El sitio inactivo no significa que el servidor esté inactivo. –

0

Los códigos de respuesta HTTP son la clave. Se puede usar el error interno del servidor (500) o la página no encontrada (404) para distinguir esas situaciones (probablemente en combinación con códigos de estado adicionales).

Si está utilizando la primavera, puede usar un Interceptor para generar respuestas diferentes en momentos diferentes (para que pueda simular que el sitio está inactivo). Un buen ejemplo se proporciona en la documentación. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

0

Si necesita denegar el acceso a una dirección de Internet específica, puede usar una aplicación de firewall. O, incluso más simple, si la dirección IP de su servidor se resuelve desde un nombre de dominio, puede apuntar ese nombre de dominio a su dirección de bucle invertido (127.0.0.1) utilizando el archivo/etc/hosts (% SystemRoot% \ system32 \ drivers \ etc \ para Windows).

+0

Creo que eso es lo que OP está pidiendo aquí. Si lo entendí correctamente, él quiere encontrar una manera de detectar si un sitio web está caído o devolver algún tipo de error interno del servidor que le impide verlo. – CoolBeans

+0

Sí, quizás. No estaba seguro, así que respondí la pregunta que recibí de la publicación. :) – aruseni

1

Para los propósitos de la prueba o simular diferentes condiciones de error, he aquí algunas sugerencias adicionales:

  • Asegúrese de que el dominio de la URL es inalcanzable (dominio se resuelve en una dirección IP, pero la dirección IP no es accesible) Puede falsificar esto agregando una entrada en su archivo/etc/hosts (si es unix)
  • Asegúrese de que el dominio de la URL no se pueda resolver, es decir, una dirección de dominio falso que no exista
  • Desconecte el cable de red de su cliente/inalámbrico: ¿qué sucede?
  • desconecte el cable de red del cliente, mientras que en el medio de una transferencia: ¿qué ocurre?
  • desconecte el cable de red del servidor de prueba en medio de una transferencia? ¿Qué ve el cliente?
  • ¿mata el servidor web del servidor de prueba mientras está en medio de una transferencia? ¿Qué sucede con la conexión URL del cliente?
  • de cierre del servidor web del servidor de prueba y qué hace que el cliente vea cuando intenta conectarse?

Al probar estos diferentes escenarios, se sorprenderá de saber qué le sucede a su cliente. Si tiene suerte obtendrá excepciones. Algunas veces el cliente puede colgarse para siempre. Pero ese es el mundo real. Buena suerte.

+0

¡Encantado de ver tantos detalles! Gracias. – Frank

Cuestiones relacionadas