Kontrollerer om en URL eksisterer i Java

1. Oversikt

I denne opplæringen vil vi se på hvordan vi kan sjekke om det finnes en URL med et eksempel i Java ved hjelp av og HODE HTTP-metoder.

2. URL-eksistens

Det kan være situasjoner i programmeringen når vi må vite om det finnes en ressurs i den angitte URL-en før vi får tilgang til den, eller vi kan til og med trenge å sjekke en URL for å kjenne ressursens helse.

Vi bestemmer en ressurs eksistens på en URL ved å se på responskoden. Typisk vi ser etter en 200, som betyr “OK”, og at forespørselen har lykkes.

3. Bruke en GET-forespørsel

Først og fremst å lage en forespørsel, kan vi opprette en forekomst av java.net.URL og send URL-en som vi ønsker tilgang til som konstruktørargument. Etter det åpner vi bare forbindelsen og får svarskoden:

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

Når ressursen ikke finnes på URL-en, får vi en 404 svarskode:

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

Som standard HTTP-metoden i HttpURLConnection er , vi setter ikke forespørselsmetoden i eksemplene i denne delen. Vi får se hvordan du overstyrer standardmetoden i neste avsnitt.

4. Bruke en HEAD-forespørsel

HEAD er også en HTTP-forespørselsmetode som er identisk med GET, bortsett fra at den ikke returnerer responsorganet.

Den får svarskoden sammen med svaroverskriftene som vi mottar hvis den samme ressursen blir bedt om med en GET-metode.

For å opprette en HEAD-forespørsel kan vi ganske enkelt sette forespørselsmetoden 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 ressursen ikke finnes på URL:

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

Ved å bruke HEAD-metoden og derved ikke laste ned responsen, reduserer vi responstid og båndbredde, og forbedrer ytelsen.

Selv om de fleste moderne servere støtter HEAD-metoden, noen hjemmelagde eller eldre servere kan avvise HEAD-metoden med en ugyldig metodetypefeil. Så vi bør bruke HEAD-metoden med forsiktighet.

5. Følgende omdirigeringer

Til slutt, når du ser etter URL-eksistens, kan det være lurt å ikke følge viderekoblinger. Men dette kan også avhenge av grunnen til at vi leter etter URL-en.

Når en URL flyttes, kan serveren omdirigere forespørselen til en ny URL med 3xx-svarskoder. Standard er å følge en omdirigering. Vi kan velge å følge eller ignorere viderekoblingen basert på vårt behov.

For å gjøre dette kan vi enten overstyre standardverdien på followRedirects for alle HttpURLConnections:

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 viderekoblinger for en enkelt tilkobling ved å bruke 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. Konklusjon

I denne artikkelen så vi på å sjekke responskoden for å finne tilgjengeligheten til en URL. Vi så også på hvordan det kan være en god ide å bruke HEAD-metoden for å spare båndbredde og få raskere respons.

Kodeeksemplet som brukes i denne opplæringen er tilgjengelig i vårt GitHub-prosjekt.


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