22 / 08 / 2009
HEADERFUNCTION, WRITEFUNCTION ve Firebug
Tekrar merhaba..
Kaldığımız yerden cURL kütüphanesine devam, bu yazıda cURL‘in bünyesinde barındırdığı HEADERFUNCTION ve WRITEFUNCTION özelliklerini izah etmeye çalışacağım.Ayrıca daha önceki yazıda belirttiğim, cURL kullanırken elimizin altında olması yararımıza olan FireBug adlı Firefox eklentisinin kullanım yerlerinden ve şeklinden kısaca bahsedeceğiz.
HEADERFUNCTION ve WRITEFUNCTION dediğimiz şeyler, cURL kütüphanesinin dahilinde bulunan, belirlediğimiz bir cURL oturumuna özellik atamak için kullandığımız curl_setopt işlevinin seçenekleri.cURL oturumumuzda bu seçenekleri kullanmak için, fonksiyonumuza:
1 2 | curl_setopt($curl_oturumu, CURLOPT_HEADERFUNCTION, "fonksiyon_header"); curl_setopt($curl_oturumu, CURLOPT_WRITEFUNCTION, "fonksiyon_write"); |
satırlarını dahil etmemiz yeterli..
HEADERFUNCTION seçeneği, cURL oturumumuzda belirlediğimiz bağlantıdan dönen header olarak tabir ettiğimiz, HTTP başlıklarını, belirttiğimiz fonksiyonda işlememize, WRITEFUNCTION ise, yine cURL oturumunda dönen verinin belirtilen fonksiyonda işlenmesine imkan tanır.Bu kullanımda belirttiğimiz fonksiyonların (Ör: fonksiyon_header, fonksiyon_write), mutlaka 2 parametreye sahip olması gerekmekte, ilk parametre cURL özkaynağının, ikinci parametre ise gelen verinin işleniceği dizge olmalıdır.Ayrıca fonksiyonların döndürdüğü değerler, gelen verinin baytı olmalıdır(return strlen($veri) gibi).Neyse bu kafa karıştırıcı açıklamadan sonra, geçelim örneğimize;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $ch = curl_init(); //Oturumumuzu başlattık. curl_setopt($ch, CURLOPT_URL, "http://code.internet.com.tr"); //Bağlanıcağımız URL adresini belirttik. curl_setopt($ch, CURLOPT_HEADERFUNCTION, "header_"); //Fonksiyonlarımızı belirledik.. curl_setopt($ch, CURLOPT_WRITEFUNCTION, "write_"); curl_exec($ch); curl_close($ch); function header_ ($kaynak, $veri) { //İlk parametre, cURL oturumu, ikinicisi gelen veri için. echo $veri."<br />"; return strlen($veri); //Fonksiyona yazılan verinin bayt sayısını döndürüyoruz. } function write_ ($kaynak, $veri) { preg_match("#<title>(.*?)</title>#si", $veri, $title); //Sayfa başlığını alıyoruz. echo $title[1]; return strlen($veri); } ?> |
Deneyen bilir, sayfamıza, bağlandığımız URL’nin, HTTP başlıklarını ve yine bağlandığımız URL’nin başlığını bir güzel yazdırdık.Bunları normal cURL oturumunda, mevzu bahis seçenekler olmadan da yapabilmemiz mümkün fakat bu seçeneklerin, gelen verinin, işlendikten sonra arayüze yansıtılması, modüler sistemlere uygunluğu (OOP) ve başlığa veya içeriğe yönelik uygulamalarda kolay kullanımı gibi avantajlar bizler için yeterince cazip.Hatta bu fonksiyonlarla bir Proxy sistemi kurmak çok basit, ekte bulunan Glype Proxyden aldığımı bir örneği inceleyerek, bu konuyla hatta cURL ile ilgili detaylı bir bilgi edinebilirsiniz.
Biraz cURL‘den sonra sıra da geldi, Firebuga..Bu süper icatla, CSS, HTML, Javascript kodlarını görüntülemeniz ve gerçek zamanlı düzenlemeniz mümkün…Bizim işimize yarayan en güzel olayı ise, POST veya GET methoduyla gönderilen verileri görmemizi sağlaması hatta bununla da kalmayıp, sunucudan alınan cevapları da önümüze sermesi.Firebug eklentisini şuradan Firefox’umuza kuralım ve bi’ güzel ayrıntıya girelim…
Örneğin, herhangi bir siteye cURL ile hazırladığımız bir betik ile bağlanmaya çalışacağız fakat POST ile yollanan veriler ve Javascript gibi Client-Side bir programlama dili veriler üzerinde değişiklik yaptığından işimiz bayağı bir zorlaştı.İşte böylesi bir durumda, imdadımıza Firebug yetişiyor, aşağıda pek zorlu olmayan bir örnekte, bir phpBB forumuna giriş yapalim ve POST edilen verileri görelim:
Sitemizin Login sayfasına girip Firebug‘ı aktif ediyor ve Net sekmesini açıyoruz:
Ardından Login formunu kullanarak giriş yapmaya çalışıyor ve yollanan verileri görüntülemek için, gerekli olan satırı detaylandırıyoruz (bizim için gerekli olan satır haliyle loginden bahseden satır).
Gördüğünüz gibi, orda sırıtan bir Sid mevcut, varsayalım bu foruma betiğimiz ile giriş yapmamızı engelleyen bu Sid olsun ve cURL ile sayfa içeriğinden bu veriyi çekemeyelim (işin içine Javascript karışsın).Böyle bir durumda; Login düğmesinin olduğu yere sağ tıklıyoruz (amacımız formun hidden girdilerini bulmak), Sid verisini yollayan girdiyi(input) buluyoruz, girdinin türü hidden ise olaya %60 Javascript dahildir(bu forumda Sid değeri sabit), Sid verisi girdilerin hiçbirinden yollanmıyor ve daha sonradan gönderiliyorsa yine Javascript etkeni vardır fakat bu sefer fonksiyon formda onsubmit veya login düğmesinde onclick gibi metodlarla çağrılıyordur.Fonksiyon metodlarla çağrıldığı durumlarda Sid mevzusunu halletmemiz daha kolay, mevzubahis fonksiyonun ismini kenardaki arama bölümünde fonksiyonu bulduruyor ve Sid‘in hangi yöntemlerle oluşturulduğunu bulduktan sonra, PHP’ye uyarlıyıp, betiğimize dahil ediyoruz.Sid sayfa yuklendikten sonra oluştuğunu varsayalım, aramamız gereken Sid girdisini etkileyen bir Javascript betiği, böyle durumlarda bakmamız gereken yer ise <head> etiketleri arasında yer etmiş Javascript betikleri, iyice araştırıp, değeri etkileyen fonksiyonu bulduktan sonra PHP’ye uyarlayıp yolumuza kaldığımız yerden devam etmemiz mümkün..Fakat bu uyarlama işi orta derecede Javascript bilgisi istiyor ve bazı Javascript’e özel fonksiyonlar işi zora sokabiliyor, umutsuzluğa kapılmamak lazım, neticede azimle olunca taş deliniyor.
Farkettim ki uzun ve geciken bir makale oldu, makale sizi tatmin etmekten uzak kaldıysa (ki bunun sebebi acemi bir yazar olmamdan başka birşey değildir), aklınıza takılan soruları yorumlarınızda belirterek doyum noktasına ulaşmanız mümkün diyor ve yazıyı bitiriyorum.
Unutmadan, gelecek yazının konusu hakkında pek bir düşünceliyim, önerilerinizi bekliyorum (:
Ramazan ayınız mübarek olsun, kolay gelsin.
Örnek:
Glype Proxy dahilinde HEADERFUNCTION ve WRITEFUNCTION kullanımı
benzer konular:














(7 votes, average: 4.57 out of 5)
design patterns