Kontrollerer, om en URL findes i Java

1. Oversigt

I denne vejledning ser vi på, hvordan vi kontrollerer, om der findes en URL med et eksempel i Java ved hjælp af og HOVED HTTP-metoder.

2. URL-eksistens

Der kan være situationer i programmeringen, når vi skal vide, om der findes en ressource i den givne URL, før vi får adgang til den, eller vi kan endda være nødt til at kontrollere en URL for at kende ressourceens helbred.

Vi bestemmer, at en ressource eksisterer ved en URL ved at se på dens svarskode. Typisk vi ser efter en 200, hvilket betyder "OK", og at anmodningen er lykkedes.

3. Brug af en GET-anmodning

Først og fremmest at lave en anmodning, kan vi oprette en forekomst af java.net.URL og videregive den URL, som vi gerne vil have adgang til, som et konstruktørargument. Derefter åbner vi simpelthen forbindelsen og får svarkoden:

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

Når ressourcen ikke findes på URL'en, får vi en 404 svarkode:

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

Som standard HTTP-metoden i HttpURLforbindelse er , vi indstiller ikke anmodningsmetoden i eksemplerne i dette afsnit. Vi får se, hvordan du tilsidesætter standardmetoden i næste afsnit.

4. Brug af en HEAD-anmodning

HEAD er også en HTTP-anmodningsmetode, der er identisk med GET, bortset fra at den ikke returnerer svaret.

Det erhverver svarskoden sammen med de svaroverskrifter, som vi modtager, hvis den samme ressource anmodes om med en GET-metode.

For at oprette en HEAD-anmodning kan vi simpelthen indstille anmodningsmetoden til HEAD, før vi får svarskoden:

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

Tilsvarende når ressourcen ikke findes på URL:

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

Ved at bruge HEAD-metoden og derved ikke downloade responsorganet reducerer vi responstid og båndbredde, og vi forbedrer ydeevnen.

Selvom de fleste moderne servere understøtter HEAD-metoden, nogle hjemmevoksne eller ældre servere kan afvise HEAD-metoden med en ugyldig metodetypefejl. Så vi skal bruge HEAD-metoden med forsigtighed.

5. Følgende omdirigeringer

Endelig, når du leder efter URL-eksistens, kan det være en god ide ikke at følge omdirigeringer. Men dette kan også afhænge af grunden til, at vi leder efter URL'en.

Når en URL flyttes, kan serveren omdirigere anmodningen til en ny URL med 3xx-svarkoder. Standard er at følge en omdirigering. Vi kan vælge at følge eller ignorere omdirigering baseret på vores behov.

For at gøre dette kan vi enten tilsidesætte standardværdien af followRedirects for alle de HttpURLforbindelses:

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

Eller vi kan deaktivere følgende omdirigeringer for en enkelt forbindelse ved hjælp af setInstanceFollowRedirects () metode:

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

6. Konklusion

I denne artikel kiggede vi på at kontrollere svarskoden for at finde tilgængeligheden af ​​en URL. Vi så også på, hvordan det kunne være en god ide at bruge HEAD-metoden til at spare båndbredde og få et hurtigere svar.

Kodeeksemplet, der bruges i denne vejledning, er tilgængeligt i vores GitHub-projekt.