Requests Kütüphanesi ile Web İsteklerine Giriş
Python ile bir web sitesine otomatik istek gönderme ve yanıtı analiz etme — güvenlik testlerinin temel yapı taşı.
Bu Temel Python serisinin son makalesinde, Temel Network serimizde öğrendiğimiz HTTP/HTTPS kavramlarını Python koduyla birleştiriyoruz — bir web sitesine PROGRAM aracılığıyla nasıl istek gönderileceğini ve yanıtın nasıl analiz edileceğini öğreneceğiz.
Requests Kütüphanesi Nedir?
requests, Python'da HTTP istekleri göndermeyi son derece kolaylaştıran, çok yaygın kullanılan bir kütüphanedir (Python'un standart kurulumunda gelmez, ayrıca kurulması gerekir):
pip install requests
(pip, Python'un kendi paket yöneticisidir — Temel Linux serimizde öğrendiğimiz apt'nin Python dünyasındaki karşılığı gibi düşünebilirsin.)
En Basit İstek: GET
import requests
yanit = requests.get("https://ornek-site.com")
print(f"Durum kodu: {yanit.status_code}")
print(f"Yanıtın ilk 200 karakteri: {yanit.text[:200]}")
Bu birkaç satırlık kod, tıpkı bir tarayıcının yaptığı gibi, belirtilen adrese bir HTTP isteği gönderir ve dönen yanıtı yakalar. yanit.status_code, Temel Network serimizdeki HTTP/HTTPS makalesinde öğrendiğimiz durum kodlarını (200, 404, 403 gibi) verir; yanit.text ise sunucunun döndürdüğü ham içeriği (genelde HTML) verir.
Neden Bu Kadar Değerli? Otomasyon Gücü
Bir tarayıcıyla TEK BİR siteye TEK BİR kez bakmak kolaydır — ama YÜZLERCE sayfayı kontrol etmek, ya da AYNI isteği farklı parametrelerle defalarca göndermek istediğinde, elle yapmak pratik değildir. İşte Python'un gücü tam burada devreye girer:
import requests
kontrol_edilecek_sayfalar = [
"https://ornek-site.com/",
"https://ornek-site.com/hakkimizda",
"https://ornek-site.com/bu-sayfa-yok",
]
for sayfa in kontrol_edilecek_sayfalar:
yanit = requests.get(sayfa)
print(f"{sayfa} -> Durum kodu: {yanit.status_code}")
Bu script, bir listedeki HER sayfayı otomatik olarak kontrol eder ve durum kodlarını raporlar — 3 sayfa yerine 300 sayfa olsa bile, kod DEĞİŞMEZ, sadece liste büyür. Bu, "kırık link kontrolü" gibi basit ama gerçek bir web sitesi denetim aracının temelidir.
HTTP Başlıklarını (Headers) İnceleme
Bir web sunucusunun yanıtı, sadece görünen içerik (HTML) değil, aynı zamanda GÖRÜNMEYEN "başlık" (header) bilgileri de içerir — bu bilgiler, Web Güvenliği kütüphanemizdeki "Güvenlik Yanlış Yapılandırması" makalesinde bahsettiğimiz güvenlik başlıklarının (Content-Security-Policy gibi) eksik olup olmadığını kontrol etmek için değerlidir:
yanit = requests.get("https://ornek-site.com")
print("Sunucu başlıkları:")
for baslik_adi, baslik_degeri in yanit.headers.items():
print(f" {baslik_adi}: {baslik_degeri}")
if "Strict-Transport-Security" in yanit.headers:
print("\nHSTS başlığı MEVCUT - iyi bir güvenlik pratiği!")
else:
print("\nHSTS başlığı EKSİK - bu bir güvenlik iyileştirme fırsatı olabilir.")
Bu script, Ağ Güvenliği kütüphanemizdeki MITM makalesinde öğrendiğimiz HSTS kavramının, GERÇEK bir sitede olup olmadığını otomatik olarak kontrol ediyor — teoriyi pratiğe döken somut bir örnek.
Yasal ve Etik Uyarı
Bir önceki makalede belirttiğimiz gibi: bu tür scriptleri SADECE kendi sitende, kendi test ortamında veya AÇIKÇA izin verilen (bug bounty programı gibi, kapsam belgesi olan) hedeflerde kullan. Başkasının web sitesine izinsiz, yoğun otomatik istek göndermek (özellikle çok sayıda istek göndermek) hem etik dışı hem de bazı durumlarda yasal sorunlara yol açabilir.
Seri Özeti
Bu Temel Python serisinde; Python'un neden popüler olduğunu, değişkenleri, kontrol yapılarını, fonksiyonları, dosya işlemlerini ve son olarak da GERÇEK iki mini aracı (port tarayıcı ve web istek analizörü) yazdık. Bu temel, ileride daha gelişmiş güvenlik araçları yazarken (veya mevcut açık kaynak araçları okuyup anlarken) sana sağlam bir zemin sağlayacak.
Bu makale, requests kütüphanesi ve web isteklerine giriş niteliğinde, başlangıç seviyeli bir özetidir ve Temel Python serimizin son makalesidir; SiberCrew ekibi tarafından hazırlanmış özgün içeriktir.