Überprüfen, ob in Java eine URL vorhanden ist

1. Übersicht

In diesem Tutorial erfahren Sie, wie Sie mithilfe der HTTP-Methoden GET und HEAD überprüfen, ob eine URL mit einem Beispiel in Java vorhanden ist .

2. URL-Existenz

Es kann Situationen bei der Programmierung geben, in denen wir wissen müssen, ob eine Ressource in der angegebenen URL vorhanden ist, bevor wir darauf zugreifen, oder wir müssen möglicherweise sogar eine URL überprüfen, um den Zustand der Ressource zu ermitteln.

Wir entscheiden über die Existenz einer Ressource unter einer URL, indem wir ihren Antwortcode betrachten. Normalerweise suchen wir nach einer 200 , was "OK" bedeutet und dass die Anfrage erfolgreich war.

3. Verwenden einer GET-Anforderung

Um eine GET- Anfrage zu stellen, können wir zunächst eine Instanz von java.net.URL erstellen und die URL, auf die wir zugreifen möchten, als Konstruktorargument übergeben. Danach öffnen wir einfach die Verbindung und erhalten den Antwortcode:

URL url = new URL("//www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_OK, responseCode);

Wenn die Ressource unter der URL nicht gefunden wird, erhalten wir einen 404- Antwortcode:

URL url = new URL("//www.example.com/xyz"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, responseCode);

Da die Standard - HTTP - Methode in HttpURLConnection ist GET , sind wir nicht die Request - Methode in den Beispielen in diesem Abschnitt festlegen. Wir werden im nächsten Abschnitt sehen, wie die Standardmethode überschrieben wird.

4. Verwenden einer HEAD-Anforderung

Der HEAD ist auch eine HTTP-Anforderungsmethode, die mit GET identisch ist, außer dass der Antworttext nicht zurückgegeben wird.

Es erhält den Antwortcode zusammen mit den Antwortheadern, die wir erhalten, wenn dieselbe Ressource mit einer GET-Methode angefordert wird.

Um eine HEAD-Anforderung zu erstellen, können Sie einfach die Anforderungsmethode auf HEAD setzen, bevor Sie den Antwortcode erhalten:

URL url = new URL("//www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); huc.setRequestMethod("HEAD"); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_OK, responseCode);

Ebenso, wenn die Ressource unter der URL nicht gefunden wird:

URL url = new URL("//www.example.com/xyz"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); huc.setRequestMethod("HEAD"); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, responseCode);

Durch die Verwendung der HEAD-Methode und das Nicht-Herunterladen des Antwortkörpers reduzieren wir die Antwortzeit und die Bandbreite und verbessern die Leistung .

Obwohl die meisten modernen Server die HEAD-Methode unterstützen, lehnen einige selbst entwickelte oder ältere Server die HEAD-Methode möglicherweise mit einem ungültigen Methodentypfehler ab. Daher sollten wir die HEAD-Methode mit Vorsicht anwenden.

5. Weiterleitungen folgen

Wenn Sie nach einer URL suchen, ist es möglicherweise eine gute Idee, Weiterleitungen nicht zu folgen. Dies kann aber auch davon abhängen, warum wir nach der URL suchen.

Wenn eine URL verschoben wird, kann der Server die Anforderung an eine neue URL mit 3xx Antwortcodes umleiten. Standardmäßig folgt eine Umleitung . Wir können die Weiterleitung je nach Bedarf verfolgen oder ignorieren.

Zu diesem Zweck können wir entweder den Standardwert von followRedirects für alle HttpURLConnection s überschreiben :

URL url = new URL("//www.example.com"); HttpURLConnection.setFollowRedirects(false); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_OK, responseCode);

Oder wir können die folgenden Weiterleitungen für eine einzelne Verbindung mithilfe der Methode setInstanceFollowRedirects () deaktivieren :

URL url = new URL("//www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection(); huc.setInstanceFollowRedirects(false); int responseCode = huc.getResponseCode(); Assert.assertEquals(HttpURLConnection.HTTP_OK, responseCode);

6. Fazit

In diesem Artikel haben wir den Antwortcode überprüft, um die Verfügbarkeit einer URL zu ermitteln. Außerdem haben wir uns angesehen, wie es eine gute Idee sein könnte, die HEAD-Methode zu verwenden, um Bandbreite zu sparen und eine schnellere Antwort zu erhalten.

Das in diesem Tutorial verwendete Codebeispiel ist in unserem GitHub-Projekt verfügbar.