Controleren of er een URL bestaat in Java

1. Overzicht

In deze zelfstudie bekijken we hoe we kunnen controleren of er een URL bestaat met een voorbeeld in Java met behulp van de KRIJGEN en HOOFD HTTP-methoden.

2. URL-aanwezigheid

Er kunnen situaties zijn bij het programmeren waarin we moeten weten of een bron in de opgegeven URL bestaat voordat we er toegang toe krijgen, of we moeten misschien zelfs een URL controleren om de gezondheid van de bron te kennen.

We bepalen het bestaan ​​van een bron op een URL door naar de reactiecode te kijken. Typisch we zoeken een 200, wat 'OK' betekent en dat het verzoek is geslaagd.

3. Met behulp van een GET-verzoek

Allereerst om een KRIJGEN request, kunnen we een instantie van java.net.URL en geef de URL door waartoe we toegang willen hebben als een constructorargument. Daarna openen we gewoon de verbinding en krijgen we de antwoordcode:

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

Als de bron niet op de URL wordt gevonden, krijgen we een 404 Reactiecode:

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

Net zo de standaard HTTP-methode in HttpURLConnection is KRIJGEN, we stellen de verzoekmethode niet in in de voorbeelden in deze sectie. In de volgende sectie zullen we zien hoe u de standaardmethode kunt overschrijven.

4. Met behulp van een HEAD-verzoek

De HEAD is ook een HTTP-verzoekmethode die identiek is aan GET, behalve dat het de antwoordtekst niet retourneert.

Het verkrijgt de antwoordcode samen met de antwoordheaders die we zullen ontvangen als dezelfde bron wordt aangevraagd met een GET-methode.

Om een ​​HEAD-verzoek te maken, kunnen we eenvoudig de verzoekmethode instellen op HEAD voordat we de antwoordcode krijgen:

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

Evenzo, wanneer de bron niet wordt gevonden op de URL:

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

Door de HEAD-methode te gebruiken en daardoor de responsbody niet te downloaden, verminderen we de responstijd en bandbreedte en verbeteren we de prestaties.

Hoewel de meeste moderne servers de HEAD-methode ondersteunen, sommige zelfgekweekte of verouderde servers kunnen de HEAD-methode afwijzen met een fout van een ongeldig methode-type. Daarom moeten we de HEAD-methode met de nodige voorzichtigheid gebruiken.

5. Volgende omleidingen

Ten slotte kan het bij het zoeken naar het bestaan ​​van een URL een goed idee zijn om geen omleidingen te volgen. Maar dit kan ook afhangen van de reden waarom we naar de URL zoeken.

Wanneer een URL wordt verplaatst, kan de server het verzoek omleiden naar een nieuwe URL met 3xx-responscodes. De standaard is om een ​​omleiding te volgen. We kunnen ervoor kiezen om de omleiding te volgen of te negeren op basis van onze behoefte.

Om dit te doen, kunnen we ofwel de standaardwaarde van volgRedirects voor alle HttpURLConnections:

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

Of we kunnen de volgende omleidingen voor een enkele verbinding uitschakelen door de setInstanceFollowRedirects () methode:

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

6. Conclusie

In dit artikel hebben we gekeken naar het controleren van de responscode om de beschikbaarheid van een URL te vinden. We hebben ook gekeken hoe het een goed idee zou kunnen zijn om de HEAD-methode te gebruiken om bandbreedte te besparen en een snellere reactie te krijgen.

Het codevoorbeeld dat in deze zelfstudie wordt gebruikt, is beschikbaar in ons GitHub-project.


$config[zx-auto] not found$config[zx-overlay] not found