Quiero devolver false si la URL tarda más de 5 segundos en conectarse; ¿cómo es esto posible con Java? Aquí está el código que estoy usando para verificar si la URL es válida
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
java.net.ConnectException: Connection timed out: connect
antes de que transcurran 2 minutos. ¿Sabes qué está causando el problema?setConnectTimeout
antes que cualquiera de los métodos que se conectan implícitamente (básicamente todos los métodos que arrojan IllegalStateException si ya están conectados). Idealmente, haga que setConnectTimeout (readTimeout) sea el primer método llamado.con.setReadTimeout()
, funcionó como se esperaba.Puede configurar el tiempo de espera de esta manera,
fuente
Si la conexión HTTP no agota el tiempo de espera, puede implementar el comprobador de tiempo de espera en el propio subproceso en segundo plano (AsyncTask, Service, etc.), la siguiente clase es un ejemplo para Customize AsyncTask que agota el tiempo de espera después de cierto período
Una muestra para esto
fuente
onPreExecute()
. Además, si cancela la tarea manualmente, también debe cancelar la llamada programada para evitar fugas.Podría obtener una solución para un problema tan similar con la adición de una línea simple
Mi requisito era conocer el código de respuesta y para eso solo obtener la metainformación era suficiente, en lugar de obtener el cuerpo de respuesta completo.
El método de solicitud predeterminado es GET y eso tardó mucho tiempo en regresar, finalmente arrojándome SocketTimeoutException. La respuesta fue bastante rápida cuando configuré el Método de solicitud en HEAD.
fuente
HEAD
solicitud que no producirá ningún cuerpo de respuesta..setRequestMethod("HEAD")
en su código. Curiosamente, esta descripción fue exactamente lo que necesitaba para reducir mi problema de "Demasiados archivos abiertos". ¿Así que gracias?