בודק אם כתובת URL קיימת בג'אווה

1. סקירה כללית

במדריך זה נבדוק כיצד לבדוק אם קיימת כתובת אתר עם דוגמה ב- Java באמצעות ה- לקבל ו רֹאשׁ שיטות HTTP.

2. קיום URL

ייתכנו מצבים בתכנות כאשר עלינו לדעת האם קיים משאב בכתובת האתר הנתונה לפני שניגש אליו, או שאולי אפילו נצטרך לבדוק כתובת אתר בכדי לדעת מה מצב המשאבים.

אנו מחליטים על קיומו של משאב בכתובת URL על ידי התבוננות בקוד התגובה שלו. בדרך כלל אנחנו מחפשים 200, שמשמעותו "אישור" ושהבקשה הצליחה.

3. שימוש בבקשת GET

קודם כל, להכין א לקבל אנו יכולים ליצור מופע של java.net.URL ולהעביר את כתובת ה- URL אליה נרצה לגשת כטיעון קונסטרוקטור. לאחר מכן, אנו פשוט פותחים את החיבור ומקבלים את קוד התגובה:

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

כאשר המשאב לא נמצא בכתובת האתר, אנו מקבלים א 404 קוד תגובה:

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

כפי ש שיטת ה- HTTP המוגדרת כברירת מחדל ב חיבור HttpURLC הוא לקבל, אנו לא מגדירים את שיטת הבקשה בדוגמאות בסעיף זה. נראה כיצד לעקוף את שיטת ברירת המחדל בסעיף הבא.

4. שימוש בבקשת HEAD

ה- HEAD היא גם שיטת בקשת HTTP זהה ל- GET אלא שהיא אינה מחזירה את גוף התגובה.

היא רוכשת את קוד התגובה יחד עם כותרות התגובה שנקבל אם אותו משאב יתבקש בשיטת GET.

כדי ליצור בקשת HEAD, אנו יכולים פשוט להגדיר את שיטת הבקשה ל- HEAD לפני שנקבל את קוד התגובה:

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

באופן דומה, כאשר המשאב לא נמצא בכתובת האתר:

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

על ידי שימוש בשיטת HEAD ובכך לא מוריד את גוף התגובה, אנו מקטינים את זמן התגובה ורוחב הפס, ומשפרים את הביצועים.

למרות שרוב השרתים המודרניים תומכים בשיטת HEAD, כמה שרתים תוצרת בית או מדור קודם עשויים לדחות את שיטת HEAD עם שגיאת סוג שיטה לא חוקית. לכן, עלינו להשתמש בשיטת HEAD בזהירות.

5. בעקבות הפניות מחדש

לבסוף, כאשר מחפשים קיום של כתובות אתרים, יכול להיות רעיון טוב לא לבצע הפניות מחדש. אבל זה יכול להיות תלוי גם בסיבה שאנחנו מחפשים את כתובת האתר.

כאשר מועברת כתובת אתר, השרת יכול להפנות את הבקשה לכתובת אתר חדשה עם קודי תגובה 3xx. ברירת המחדל היא לעקוב אחר הפניה מחדש. אנו יכולים לבחור לעקוב אחר ההפניה מחדש או להתעלם ממנה לפי הצורך שלנו.

לשם כך אנו יכולים לעקוף את ערך ברירת המחדל של followRedirects לכל חיבור HttpURLCs:

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

לחלופין, אנו יכולים להשבית את ההפניות הבאים לחיבור יחיד באמצעות ה- setInstanceFollowRedirects () שיטה:

URL url = URL חדש ("// www.example.com"); HttpURLConnection huc = (HttpURLConnection) url.openConnection (); huc.setInstanceFollowRedirects (שקר); int responseCode = huc.getResponseCode (); Assert.assertEquals (HttpURLConnection.HTTP_OK, responseCode);

6. מסקנה

במאמר זה בדקנו את קוד התגובה כדי למצוא את הזמינות של כתובת אתר. כמו כן, בדקנו כיצד זה יכול להיות רעיון טוב להשתמש בשיטת HEAD כדי לחסוך רוחב פס ולקבל תגובה מהירה יותר.

דוגמת הקוד המשמשת במדריך זה זמינה בפרויקט GitHub שלנו.