Provjera postoji li URL u Javi

1. Pregled

U ovom uputstvu tražit ćemo kako provjeriti postoji li URL s primjerom u Javi pomoću DOBITI i GLAVA HTTP metode.

2. Postojanje URL-a

U programiranju mogu biti situacije kada moramo znati postoji li resurs u danom URL-u prije nego što mu pristupimo, ili ćemo čak možda trebati provjeriti URL kako bismo znali stanje resursa.

Postojanje resursa na URL-u utvrđujemo gledajući njegov odgovor. Tipično tražimo a 200, što znači "OK" i da je zahtjev uspio.

3. Korištenje GET zahtjeva

Prije svega, napraviti a DOBITI zahtjev, možemo stvoriti instancu java.net.URL i proslijedite URL kojem bismo željeli pristupiti kao argument konstruktora. Nakon toga jednostavno otvorimo vezu i dobijemo kod odgovora:

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

Kada resurs nije pronađen na URL-u, dobit ćemo 404 kod odgovora:

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

Kao zadana HTTP metoda u HttpURLConnection je DOBITI, ne postavljamo metodu zahtjeva u primjerima u ovom odjeljku. U sljedećem ćemo odjeljku vidjeti kako nadjačati zadani način.

4. Korištenje zahtjeva HEAD

HEAD je također metoda HTTP zahtjeva koja je identična GET, osim što ne vraća tijelo odgovora.

Pribavlja kod odgovora zajedno sa zaglavljima odgovora koja ćemo dobiti ako se isti resurs zatraži GET metodom.

Da bismo stvorili HEAD zahtjev, možemo jednostavno postaviti Request Method na HEAD prije nego što dobijemo kod odgovora:

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

Slično tome, kada resurs nije pronađen na URL-u:

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

Korištenjem HEAD metode i time ne preuzimanjem tijela odgovora smanjujemo vrijeme odziva i propusnost te poboljšavamo performanse.

Iako većina modernih poslužitelja podržava HEAD metodu, neki domaći ili naslijeđeni poslužitelji mogu odbiti HEAD metodu s pogreškom u pogrešnoj vrsti metode. Dakle, metodu HEAD trebali bismo koristiti s oprezom.

5. Slijedite preusmjeravanja

Konačno, kada tražimo postojanje URL-a, možda bi bilo dobro ne slijediti preusmjeravanja. Ali to također može ovisiti o razlogu zbog kojeg tražimo URL.

Kada se URL premjesti, poslužitelj može preusmjeriti zahtjev na novi URL s 3xx kodovima odgovora. Zadano je slijediti preusmjeravanje. Možemo odabrati slijediti ili zanemariti preusmjeravanje na temelju svojih potreba.

Da bismo to učinili, možemo nadjačati zadanu vrijednost followRedirects za sve HttpURLConnections:

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

Ili možemo onemogućiti slijedeća preusmjeravanja za jednu vezu pomoću setInstanceFollowRedirects () metoda:

URL url = novi URL ("// www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); huc.setInstanceFollowRedirects (netačno); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);

6. Zaključak

U ovom smo članku pregledali provjeru koda odgovora kako bismo pronašli dostupnost URL-a. Također, pogledali smo kako bi bilo dobro koristiti HEAD metodu za uštedu propusnosti i brži odgovor.

Primjer koda korišten u ovom vodiču dostupan je u našem GitHub projektu.