Kontrola, či adresa URL existuje v prostredí Java

1. Prehľad

V tomto výučbe sa pozrieme na to, ako pomocou príkladu v jazyku Java skontrolovať, či existuje adresa URL ZÍSKAJTE a HLAVA Metódy HTTP.

2. Existencia URL

V programovaní môžu nastať situácie, keď budeme musieť vedieť, či v danej adrese URL existuje zdroj, skôr ako k nemu vstúpime, alebo dokonca budeme musieť skontrolovať adresu URL, aby sme poznali jeho stav.

O existencii zdroja na URL rozhodujeme na základe jeho kódu odpovede. Typicky hľadáme a 200, čo znamená „v poriadku“ a požiadavka bola úspešná.

3. Pomocou žiadosti GET

Najskôr zo všetkého urobiť ZÍSKAJTE môžeme vytvoriť inštanciu java.net.URL a predáme adresu URL, ku ktorej by sme chceli získať prístup, ako argument konštruktora. Potom jednoducho otvoríme pripojenie a dostaneme kód odpovede:

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

Keď sa zdroj nenájde na URL, dostaneme a 404 kód odpovede:

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

Ako predvolená metóda HTTP v HttpURLConnection je ZÍSKAJTE, v príkladoch v tejto časti nenastavujeme metódu žiadosti. Uvidíme, ako prepísať predvolenú metódu v ďalšej časti.

4. Použitie žiadosti HEAD

HEAD je tiež metóda HTTP požiadavky, ktorá je identická s GET, okrem toho, že nevracia telo odpovede.

Získava kód odpovede spolu s hlavičkami odpovedí, ktoré dostaneme, ak sa pri metóde GET požaduje rovnaký zdroj.

Aby sme vytvorili požiadavku HEAD, môžeme pred získaním kódu odpovede jednoducho nastaviť metódu požiadavky na HEAD:

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

Podobne, keď sa zdroj nenájde na adrese URL:

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

Použitím metódy HEAD a tým pádom nestiahnutím tela odpovede znižujeme čas odozvy a šírku pásma a zlepšujeme výkon.

Aj keď väčšina moderných serverov podporuje metódu HEAD, niektoré domáce alebo staršie servery môžu odmietnuť metódu HEAD s chybou neplatného typu metódy. Metódu HEAD by sme teda mali používať opatrne.

5. Nasledujúce presmerovania

Nakoniec, pri hľadaní existencie adresy URL by mohlo byť dobré nesledovať presmerovania. To však môže závisieť aj od dôvodu, prečo hľadáme adresu URL.

Po presunutí adresy URL môže server presmerovať požiadavku na novú adresu URL s kódmi odpovede 3xx. Predvolené je sledovať presmerovanie. Na základe našej potreby sa môžeme rozhodnúť presmerovanie sledovať alebo ignorovať.

Za týmto účelom môžeme prepísať predvolenú hodnotu followRedirects pre všetky HttpURLConnections:

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

Alebo môžeme deaktivovať nasledujúce presmerovania pre jedno pripojenie pomocou setInstanceFollowRedirects () metóda:

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

6. Záver

V tomto článku sme sa pozreli na kontrolu kódu odpovede s cieľom zistiť dostupnosť adresy URL. Pozreli sme sa tiež na to, ako by mohol byť dobrý nápad použiť metódu HEAD na šetrenie šírky pásma a rýchlejšiu odpoveď.

Príklad kódu použitý v tejto príručke je k dispozícii v našom projekte GitHub.


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