Annak ellenőrzése, hogy létezik-e URL a Java-ban
1. Áttekintés
Ebben az oktatóanyagban megvizsgáljuk, hogyan lehet ellenőrizni, hogy létezik-e URL, egy példával a Java-ban a KAP és FEJ HTTP módszerek.
2. URL-létezés
Előfordulhatnak olyan helyzetek a programozásban, amikor tudnunk kell, hogy létezik-e erőforrás az adott URL-ben, mielőtt hozzáférnénk hozzá, vagy akár egy URL-t is ellenőriznünk kell, hogy ismerjük az erőforrás állapotát.
Az erőforrás URL-címen való létezéséről úgy döntünk, hogy megvizsgáljuk a válaszkódját. Jellemzően keresünk egy 200, ami azt jelenti, hogy „OK”, és hogy a kérés sikeres volt.
3. GET kérés használata
Először is, hogy a KAP kérésre létrehozhatunk egy példányát java.net.URL és adja át az URL-t, amelyet konstruktor argumentumként szeretnénk elérni. Ezt követően egyszerűen megnyitjuk a kapcsolatot, és megkapjuk a válaszkódot:
URL url = új URL ("// www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);
Ha az erőforrás nem található az URL-n, akkor a 404 válaszkód:
URL url = új URL ("// www.example.com/xyz"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_NOT_FOUND, responseCode);
Mint alapértelmezett HTTP módszer HttpURLConnection van KAP, nem állítjuk be a kérés módszerét az ebben a részben található példákban. Az alapértelmezett módszert felülírhatjuk a következő szakaszban.
4. HEAD kérés használata
A HEAD egy HTTP kérési módszer is, amely megegyezik a GET-tel, kivéve, hogy nem adja vissza a választestet.
Megszerzi a válaszkódot a válaszfejlécekkel együtt, amelyeket megkapunk, ha ugyanazt az erőforrást GET módszerrel kérjük.
HEAD kérelem létrehozásához egyszerűen beállíthatjuk a Request Method-ot HEAD-re, mielőtt megkapnánk a válaszkódot:
URL url = új URL ("// www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); huc.setRequestMethod ("HEAD"); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);
Hasonlóképpen, ha az erőforrás nem található az URL-n:
URL url = új URL ("// www.example.com/xyz"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); huc.setRequestMethod ("HEAD"); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_NOT_FOUND, responseCode);
A HEAD módszer használatával és ezáltal a válasz törzsének letöltésével csökkentjük a válaszidőt és a sávszélességet, és javítjuk a teljesítményt.
Bár a legtöbb modern szerver támogatja a HEAD módszert, egyes házi vagy régi szerverek érvénytelen metódustípussal utasíthatják el a HEAD módszert. Tehát óvatosan kell használnunk a HEAD módszert.
5. Az átirányítások követése
Végül, ha az URL létezését keresi, érdemes lehet nem követni az átirányításokat. De ez függhet az URL keresésének okától is.
Az URL áthelyezésekor a szerver átirányíthatja a kérést egy új URL-re, 3xx válaszkóddal. Alapértelmezés szerint az átirányítást kell követni. Szükségünk alapján választhatjuk az átirányítás követését vagy figyelmen kívül hagyását.
Ehhez vagy felülírhatjuk az alapértelmezett értékét followRedirects az összes HttpURLConnections:
URL url = új URL ("// www.example.com"); HttpURLConnection.setFollowRedirects (hamis); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);
Vagy letilthatjuk az átirányítások követését egyetlen kapcsolathoz a setInstanceFollowRedirects () módszer:
URL url = új URL ("// www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); huc.setInstanceFollowRedirects (hamis); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);
6. Következtetés
Ebben a cikkben megvizsgáltuk a válaszkódot, hogy megtaláljuk-e az URL elérhetőségét. Megvizsgáltuk azt is, hogyan lehet jó ötlet a HEAD módszer használata a sávszélesség megtakarítása és a gyorsabb válasz érdekében.
Az oktatóanyagban használt kódpélda elérhető a GitHub projektünkben.