Teknoloji ve Yazılım

Python ile URL durum kodu kontrolü: kırık bağlantıları doğru yorumlayın

Kendi sitenizdeki birkaç bağlantıyı Python ile kontrol edin; HTTP hatası, yönlendirme ve ağ hatasını birbirinden ayırın.

Python ile URL durum kodu kontrolü: kırık bağlantıları doğru yorumlayın — Liste seç, Yanıtı oku, Hata türünü ayır, Kaynağı düzelt
Bu rehber için hazırlanan özgün açıklayıcı şema; uygulama ekran görüntüsü değildir.
GÖRSEL ANLATIM

Python ile URL durum kodu kontrolü — uygulama akışı

1

Liste seç

Az sayıda herkese açık bağlantıyı belirle.

2

Yanıtı oku

Önce HEAD, gerekiyorsa sınırlı GET dene.

3

Hata türünü ayır

HTTP kodunu ağ hatasıyla karıştırma.

4

Kaynağı düzelt

Yeni adresin aynı iddiayı desteklediğini doğrula.

Bu şema rehber için hazırlanmış özgün bir iş akışıdır; uygulama ekran görüntüsü değildir.

Kısa özet

Kendi sitenizdeki birkaç bağlantıyı Python ile kontrol edin; HTTP hatası, yönlendirme ve ağ hatasını birbirinden ayırın.

Teknoloji ve Yazılım topluluğuna git

Bir blog yazısındaki kaynak bağlantısının açılmaması, okuyucunun rehberi uygulamasını zorlaştırır. Küçük bir URL kontrol betiği, bakım sırasında sorunlu bağlantıları bulmaya yardımcı olabilir. Fakat tek bir HTTP yanıtı sitenin herkes için kapalı olduğunu kanıtlamaz. Sunucu botları sınırlayabilir, HEAD isteğini desteklemeyebilir veya geçici bir ağ sorunu yaşanabilir. Bu rehberde sınırlı sayıda, sizin seçtiğiniz herkese açık bağlantıyı kontrol eden bir araç oluşturuyoruz.

1. Kontrol listesini dar tutun

Önce kendi sitenizdeki beş önemli bağlantıyla başlayın: ana sayfa, bir blog yazısı, gizlilik sayfası ve iki resmî kaynak. Kullanıcı oturumu gerektiren yönetim sayfaları bu örneğin amacı değildir. Betiğe parola, erişim anahtarı veya kişisel bilgi içeren URL vermeyin. Bir sitenin tamamını yoğun şekilde taramak farklı bir iştir; bu kısa program bunu yapmaz ve erişim kısıtlamalarını aşmaya çalışmaz.

2. HEAD ve GET ayrımı

HEAD isteği genellikle yanıt başlıklarını kontrol etmek için kullanılır. Bazı sunucular bu yöntemi kabul etmez. Böyle bir durumda yalnızca 405 veya 501 yanıtı için GET deniyoruz. Diğer hataları sürekli tekrar etmiyoruz. GET denemesinde içerik gövdesini okumadan yanıtı kapatıyoruz; bu yine de sunucuya bir istek gönderir. Programı saniyede yüzlerce bağlantı deneyecek şekilde genişletmeyin.

3. Çalışan kontrol kodu

Kodu url_kontrol.py olarak kaydedin. python url_kontrol.py https://example.com/ komutuyla tek bağlantı deneyebilirsiniz. Birden çok adresi boşlukla ayırın. Varsayılan örnek alan adı gerçek iş sitenizin yerine geçen test girdisidir.

python
import sys
import time
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
from urllib.parse import urlsplit

urls = sys.argv[1:] or ['https://example.com/']
for url in urls[:20]:
    parsed = urlsplit(url)
    if parsed.scheme != 'https' or not parsed.hostname or parsed.username or parsed.password:
        print('ATLANDI: HTTPS ve kimlik bilgisi içermeyen adres kullanın.')
        continue
    for method in ('HEAD', 'GET'):
        request = Request(url, method=method,
                          headers={'User-Agent':'SiteLinkCheck/1.0'})
        try:
            with urlopen(request, timeout=10) as response:
                print(response.status, url, '->', response.geturl())
            break
        except HTTPError as error:
            code = error.code
            error.close()
            if method == 'HEAD' and code in (405, 501):
                continue
            print('HTTP', code, url)
            break
        except (URLError, TimeoutError, OSError) as error:
            print('AG HATASI', url, type(error).__name__)
            break
    time.sleep(1)

4. Çıktıyı nasıl yorumlayacaksınız?

Başarılı yanıt aldığınızda ilk ve son URL farklıysa bir yönlendirme olmuş olabilir. Program standart yönlendirmeleri takip eder, fakat bütün yönlendirme zincirini raporlamaz. 404 yanıtı hedefin o istekte bulunamadığını, 403 erişimin reddedildiğini, 429 ise istek sınırına takıldığınızı gösterebilir. 403 görünce sayfayı silinmiş kabul etmeyin. Ağ hatası satırı da HTTP durum koduyla aynı şey değildir; DNS, bağlantı veya zaman aşımı gibi durumlar ayrıca incelenmelidir.

5. İnsan kontrolünü ekleyin

Sorunlu görünen bağlantıyı normal tarayıcınızda açın. Kaynak kurumun sitesinde aynı belge yeni adrese taşınmış mı bakın. Güncel bağlantıyı bulduğunuzda başlık ve içeriğin eski kaynakla aynı konuyu desteklediğini kontrol edin. Sadece çalışıyor diye farklı bir sayfayı eski kaynağın yerine koymayın. Bir eğitim yazısında kullanılan API özelliği kaldırılmışsa bağlantıyı düzeltmek yetmez; rehberin adımlarını da güncellemek gerekir.

6. Sık hatalar

Komutta URL’nin sonunda kopyalanmış nokta veya kapanış parantezi bulunabilir. Tarayıcıdan adresi temiz biçimde alın. Türkçe karakterli yollar kodlanmış görünebilir; adresi gereksiz yere elle dönüştürmeyin. Kurumsal ağdaki bağlantı kısıtlaması hedef sitenin kapalı olduğu anlamına gelmez. Program SSL doğrulamasını kapatmaz; sertifika hatasını yok sayarak sonuca ulaşmaya çalışmak yerine nedenini araştırın. Çok uzun bekleme varsa önce tek bağlantıyla deneyin.

7. Bakım kaydı oluşturun

Sonuçları tarihli bir notta “adres, gözlenen durum, kontrol eden kişi, yapılan düzeltme” biçiminde tutun. Aynı kaynak bir hafta sonra farklı yanıt verebilir. Kırık bağlantı bakımını içeriğin anlamını doğrulama çalışmasıyla birleştirin. Yayındaki rehberde bir linki değiştirdiğinizde makalenin ilgili cümlesini de yeniden okuyun. Bu araç küçük bir teknik tarama sağlar; bağlantının doğruluğu, güvenilirliği ve okuyucuya uygunluğu ayrı editoryal kararlardır.

İlgili okumalar

Resmî kaynaklar ve devamı

#Python#URL kontrolü#HTTP#site bakımı