Curl Kütüphanesi ile Veri Çekimi – #1

Bu yazıda curl kütüphanesi ile veri çekme işlemini gerçekleştireceğiz. Bu işlemi sizin için oldukça kolaylaştırmaya çalışacağım…

Öncelikle file_get_contents fonksiyonu varken ben neden curl kullanayım sorusunu yanıtlayalım.

curl kütüphanesini, file_get_contents fonksiyonundan ayıran özellikler,

  • curl ile veri çekeceğimiz adrese bilgi gönderip gelen cevabı çekebiliriz,
  • curl ile cookie (çerez) kullanarak başka işlemlerden yararlanabiliriz,
  • ayrıca curl kütüphanesi file_get_contents fonksiyonuna kıyasla sisteminizi daha az yorar.

Tüm farklılıklara yukarıda yer veremesekte curl fonksiyonunun işlevlerini gördüğümüzde fark kafamızda tam olarak anlaşılacak.

Temel kodları gösterelim ve mantığını açıklayalım öncelikle,

curl_init()  : curl oturumunu açar ve curl işlemleri için işlem tanımlar.
curl_setopt(): sunucuya gönderilecek verileri tanımlar.
curl_exec()  : gönderdiğimiz verilere göre gelen içeriği sunucudan alır. 
curl_close() : curl oturumunu sonlandırır.

Bir curl oturumu açtığımızda işlemleri tanımlaması için bu oturumu bir değişkene atamamız gerekir.

Örneğin:

$ch = curl_init();

$ch değişkeniyle oturum açtığımız için sonraki işlemlerde hep bu değişkeni kullanacağız.

curl oturumumuzu açtığımıza göre bir de kapatmamız gerekecek, bunun için de curl_close() fonksiyonunu kullanacağız. Bu fonksiyonun kullanımı, aşağıdaki gibidir.

 curl_close(Değişken); 

Bir oturumumuzu $ch değişkeniyle açtığımız için fonksiyonumuzu da aşağıda ki gibi kullanacağız.

curl_close($ch);

Şimdi curl_setopt() fonksiyonunun kullanım yapısı aşağıdaki gibidir. Bu fonksiyonun kullanımı, aşağıdaki gibidir.

 curl_setopt(curl oturumu, yapılacak işlem, işlem değişkeni);

Örnek olarak www.cakirefekan.com adresine bağlanalım.

<?php
$ch = curl_init(); // curl oturumunu başlattık
$site = "http://cakirefekan.com"; // bağlanacağımız adresi değişkene kaydettik.
curl_setopt($ch, CURLOPT_URL, $site); // adresimize bağlandık.
curl_close($ch); // curl oturumunu sonlandırdık.
?>

Son işlemimiz ile adresimize bağlandık ancak şu haliyle hiç bir işimize yaramaz. Bu aynı arkadaşımıza önemli bir soru sorup ondan cevap beklerken onun bize yanıt vermeyip sadece “görüldü.” atmasına benzer. Bizim işlem yapmamız için bağlandığımız siteden  bir yanıt, veri almalıyız.

Bu yanıtı da temel kodlarımızın arasında yer alan curl_exec() fonksiyonu ile alacağımızı unutmayalım. Bu fonksiyonun kullanımını şu şekildedir,

curl_exec(curl oturumu);

Bu fonksiyonun kullanımını öğrendiğimize göre biraz önce bağlantısını kurduğumuz adresten verilerimizi alabiliriz.

<?php
$ch = curl_init(); // curl oturumunu başlattık.
$site = "http://cakirefekan.com"; // bağlanacağımız adresi değişkene kaydettik.
curl_setopt($ch, CURLOPT_URL, $site); // adresimize bağlandık.
 curl_exec($ch); // bağlandığımız adresten verileri çektik ve ekrana yazdırdık.
curl_close($ch); // curl oturumunu sonlandırdık.
?>

Eğer verilerimizi çekip hemen ekrana yazdırmak istemezsek curl_exec() fonksiyonunu bir değişkene atayabiliriz. Örnek olarak,

<?php
$ch = curl_init(); // curl oturumunu başlattık.
$site = "http://cakirefekan.com"; // bağlanacağımız adresi değişkene kaydettik.
curl_setopt($ch, CURLOPT_URL, $site); // adresimize bağlandık.
$VeriCek = curl_exec($ch); // bağlandığımız adresten verileri çektik ve değişkene atadık.
curl_close($ch); // curl oturumunu sonlandırdık.
 echo $VeriCek; // çektiğimiz verileri ekrana yazdırdık.
?>

Curl ile veri çekimi kabaca budur. Şimdi de biraz detaylara inelim…

Örneğin bağlandığımız sunucu, bağlantıda kullanılan tarayıcıya göre farklı yanıtlar vermekte. Bu durumda sunucuya bir tarayıcı bilgisi göndermemiz gerekecek. Onun için de curl_setopt() fonksiyonunu kullanacağız. Bu fonksiyon aşağıdaki gibidir.

curl_setopt(curl oturumu, CURLOPT_USERAGENT, tarayıcı bilgisi);

Bu fonksiyonu kullanırken php de yer alan süper küresel değişken olan $_SERVER değişkenini kullanacağız. Ve aşağıdaki hali alacak fonksiyonumuz.

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

Örneğimiz de bu şekilde olur.

<?php
$ch = curl_init(); // curl oturumunu başlattık.
$site = "http://cakirefekan.com"; // bağlanacağımız adresi değişkene kaydettik.
 curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // Sayfayı görüntüleyen kullanıcının tarayıcı bilgisini gönderdik.
curl_setopt($ch, CURLOPT_URL, $site); // adresimize bağlandık.
$VeriCek = curl_exec($ch); // bağlandığımız adresten verileri çektik ve değişkene atadık.
curl_close($ch); // curl oturumunu sonlandırdık.
 echo $VeriCek; // çektiğimiz verileri ekrana yazdırdık.
?>

Eğer tarayıcı bilgisini, kendi belirlediğiniz bir tarayıcı bilgisi olarak göndermek isterseniz onun için aşağıdaki yapıyı kullanabilirsiniz.

$tarayicibilgisi = "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19";
curl_setopt ($ch, CURLOPT_USERAGENT, $tarayicibilgisi);

Ama bağlanılan sunucunun tarayıcıyla işi olmayabilir bunu yerine sunucuya hangi adresten bağlanıldığı önem arz ediyor olabilir.

Bu durumda da tekrar curl_setopt() fonksiyonunu kullanacağız. Bu fonksiyonun kullanımı ise aşağıdaki haldedir.

curl_setopt(curl oturumu ,CURLOPT_REFERER, önceki bağlantı);

Bu fonksiyonu örneğimizde kullandığımızda şöyle bir yapı çıkar ortaya.

<?php
$ch = curl_init(); // curl oturumunu başlattık.
$site = "http://cakirefekan.com"; // bağlanacağımız adresi değişkene kaydettik.
 curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // Sayfayı görüntüleyen kullanıcının tarayıcı bilgisini gönderdik.
 $oncekiadres = "https://www.google.com.tr/#safe=off&q=efekan+%C3%A7ak%C4%B1r" // Önceki adresi değişkene atadık.
curl_setopt(curl oturumu ,CURLOPT_REFERER, önceki bağlantı);
curl_setopt($ch, CURLOPT_URL, $site); // adresimize bağlandık.
$VeriCek = curl_exec($ch); // bağlandığımız adresten verileri çektik ve değişkene atadık.
curl_close($ch); // curl oturumunu sonlandırdık.
 echo $VeriCek; // çektiğimiz verileri ekrana yazdırdık.
?>

Şimdilik daha fazla detaya girmeden burada bırakalım. Eğer işiniz daha detaylı ise bir sonraki makaleye geçebilirsiniz.

About CakirEfekan 36 Articles
Evet, ben...

2 Comments Posted

Leave a Reply

Your email address will not be published.


*