Je veux renvoyer false si l'URL prend plus de 5 secondes pour se connecter - comment est-ce possible en utilisant Java? Voici le code que j'utilise pour vérifier si l'URL est valide
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
avant même 2 minutes est écoulé. Savez-vous ce qui cause le problème?setConnectTimeout
avant l'une des méthodes qui se connectent implicitement (essentiellement toutes les méthodes qui lancent IllegalStateException si elles sont déjà connectées). Idéalement, faites de setConnectTimeout (readTimeout) les premières méthodes appelées.con.setReadTimeout()
, cela a fonctionné comme prévu.Vous pouvez définir un délai comme celui-ci,
la source
Si la connexion HTTP n'expire pas, vous pouvez implémenter le vérificateur de délai d'expiration dans le thread d'arrière-plan lui-même (AsyncTask, Service, etc.), la classe suivante est un exemple de Customize AsyncTask qui expire après une certaine période
Un échantillon pour cela
la source
onPreExecute()
. De plus, si vous annulez la tâche manuellement, vous devez également annuler l'appel programmé pour éviter les fuites.Je pourrais trouver une solution à un problème similaire en ajoutant une simple ligne
Mon exigence était de connaître le code de réponse et pour cela, il suffisait d'obtenir les méta-informations au lieu d'obtenir le corps de la réponse complet.
La méthode de demande par défaut est GET et cela prenait beaucoup de temps à revenir, me jetant finalement SocketTimeoutException. La réponse a été assez rapide lorsque j'ai défini la méthode de demande sur HEAD.
la source
HEAD
requête en une requête qui ne produira aucun corps de réponse..setRequestMethod("HEAD")
dans son code. Curieusement, cette description était exactement ce dont j'avais besoin pour réduire mon problème de «Trop de fichiers ouverts». Donc merci?