Memeriksa sama ada URL Ada di Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat bagaimana untuk memeriksa apakah ada URL dengan contoh di Java menggunakan kaedah GET dan HEAD HTTP.

2. Kewujudan URL

Mungkin terdapat situasi dalam pengaturcaraan ketika kita harus mengetahui apakah sumber daya ada di URL yang diberikan sebelum mengaksesnya, atau kita mungkin perlu memeriksa URL untuk mengetahui kesihatan sumber tersebut.

Kami memutuskan keberadaan sumber pada URL dengan melihat kod responsnya. Biasanya kita mencari 200 , yang bermaksud "OK" dan permintaan itu berjaya.

3. Menggunakan Permintaan GET

Pertama sekali, untuk membuat permintaan GET , kita dapat membuat contoh java.net.URL dan meneruskan URL yang ingin kita akses sebagai argumen pembangun. Selepas itu, kami hanya membuka sambungan dan mendapatkan kod respons:

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

Apabila sumber tidak dijumpai di URL, kami mendapat kod respons 404 :

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

Oleh kerana kaedah HTTP lalai dalam HttpURLConnection adalah GET , kami tidak menetapkan kaedah permintaan dalam contoh di bahagian ini. Kami akan melihat cara menimpa kaedah lalai di bahagian seterusnya.

4. Menggunakan Permintaan KEPALA

HEAD juga merupakan kaedah permintaan HTTP yang serupa dengan GET kecuali bahawa ia tidak mengembalikan badan respons.

Ia memperoleh kod respons bersama dengan tajuk respons yang akan kami terima jika sumber yang sama diminta dengan kaedah GET.

Untuk membuat permintaan HEAD, kita hanya dapat menetapkan Kaedah Permintaan ke HEAD sebelum mendapatkan kod respons:

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

Begitu juga, apabila sumber tidak dijumpai di URL:

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

Dengan menggunakan kaedah HEAD dan dengan itu tidak memuat turun badan respons, kami mengurangkan masa dan lebar jalur tindak balas, dan kami meningkatkan prestasi .

Walaupun kebanyakan pelayan moden menyokong kaedah HEAD, beberapa pelayan tempatan atau warisan mungkin menolak kaedah HEAD dengan ralat jenis kaedah yang tidak sah. Jadi, kita harus menggunakan kaedah KEPALA dengan berhati-hati.

5. Mengikuti Pengalihan

Akhirnya, semasa mencari kewujudan URL, sebaiknya jangan mengikuti pengalihan. Tetapi ini juga bergantung pada alasan kita mencari URL.

Apabila URL dipindahkan, pelayan dapat mengalihkan permintaan ke URL baru dengan kod respons 3xx. Lalai adalah mengikuti pengalihan . Kita boleh memilih untuk mengikuti atau mengabaikan pengalihan berdasarkan keperluan kita.

Untuk melakukan ini, kita boleh mengganti nilai lalai dari followRedirects untuk semua HttpURLConnection s:

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

Atau, kita boleh melumpuhkan pengalihan berikut untuk satu sambungan dengan menggunakan kaedah setInstanceFollowRedirects () :

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

6. Kesimpulannya

Dalam artikel ini, kami memeriksa memeriksa kod respons untuk mencari ketersediaan URL. Kami juga melihat bagaimana mungkin idea yang baik untuk menggunakan kaedah HEAD untuk menjimatkan lebar jalur dan mendapat tindak balas yang lebih cepat.

Contoh kod yang digunakan dalam tutorial ini terdapat di projek GitHub kami.