Ich möchte false zurückgeben, wenn die Verbindung der URL länger als 5 Sekunden dauert. Wie ist dies mit Java möglich? Hier ist der Code, mit dem ich überprüfe, ob die URL gültig ist
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
vor noch 2 Minuten auf. Wissen Sie, was das Problem verursacht?setConnectTimeout
vor jeder der Methoden aufrufen , die implizit eine Verbindung herstellen (im Grunde alle Methoden, die IllegalStateException auslösen, wenn sie bereits verbunden sind). Machen Sie im Idealfall setConnectTimeout (readTimeout) zu den ersten aufgerufenen Methoden.con.setReadTimeout()
funktionierte es wie erwartet.Sie können das Zeitlimit wie folgt einstellen:
quelle
Wenn für die HTTP-Verbindung keine Zeitüberschreitung auftritt, können Sie die Zeitüberschreitungsprüfung im Hintergrundthread selbst (AsyncTask, Service usw.) implementieren. Die folgende Klasse ist ein Beispiel für das Anpassen von AsyncTask, bei dem nach einer bestimmten Zeit eine Zeitüberschreitung auftritt
Ein Beispiel dafür
quelle
onPreExecute()
. Wenn Sie die Aufgabe manuell abbrechen, sollten Sie auch den geplanten Anruf abbrechen, um Undichtigkeiten zu vermeiden.Ich könnte eine Lösung für solch ein ähnliches Problem durch Hinzufügen einer einfachen Zeile erhalten
Meine Anforderung bestand darin, den Antwortcode zu kennen, und dafür war es ausreichend, nur die Metainformationen zu erhalten, anstatt den vollständigen Antworttext zu erhalten.
Die Standardanforderungsmethode ist GET. Die Rückkehr hat viel Zeit in Anspruch genommen und mir schließlich die SocketTimeoutException ausgelöst. Die Antwort war ziemlich schnell, als ich die Anforderungsmethode auf HEAD setzte.
quelle
HEAD
Anforderung, die keinen Antworttext erzeugt..setRequestMethod("HEAD")
in ihrem Code. Seltsamerweise war diese Beschreibung genau das, was ich brauchte, um mein Problem mit "Zu viele geöffnete Dateien" zu reduzieren. So danke?