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ü — uygulama akışı
Liste seç
Az sayıda herkese açık bağlantıyı belirle.
Yanıtı oku
Önce HEAD, gerekiyorsa sınırlı GET dene.
Hata türünü ayır
HTTP kodunu ağ hatasıyla karıştırma.
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 gitBir 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.
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.


