IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 20 Mayıs 2012, 16:28   #1
Deep
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)
Php cURL Dersleri




cURL Dersleri - Bölüm 1 - Giriş

Php’de çoğu arkadaşımızın curl konusunda oldukça meraklı olduğunu görüyorum. Bu derslerle size dilim döndüğünce curl fonksiyonunu anlatmaya çalışacağım.

Öncelikle curl ne işe yarar ona değinelim. Curl fonksiyonu ile file_get_contents gibi diğer sitelerin kaynak kodunu çekebilir, diğer sitelerden hostunuza dosya download edebilirsiniz. file_get_contents den farklı olarak istediğiniz siteye login olabilirsiniz, referrer, cookie ve useragent gibi bilgilerinizi değiştirebilirsiniz, yada isterseniz proxy ile bağlanabilirsiniz. Ayrıca file_get_contents e göre sunucuyu daha az yorar ve daha performanslıdır.

Kullanımında temel olarak birkaç fonksiyon ile uygulanır. Onları öğrenelim önce

curl_init() : curl oturumunu açar
curl_setopt(): referrer, url, useragent, postdata gibi ayarların yapıldığı fonksiyon
curl_exec(): bu fonksiyon yazılana kadar olan curl fonksiyonlarını işleme sokar ve gelen veriyi alır
curl_close(): curl oturumunu kapatır

Temel yapı ve kullanım sırası bu şekildedir.

curl_init() oturumunu açtığımızda diğer fonksiyonlarda o oturum ile çalıştığımızı belirtmeliyiz. Yani;
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch curl_init(); 

Burada $ch değişkenimize bir oturum açtık, bundan sonraki işlemlerimizde bu oturum ile işlem yapacağız. Örneğin ref5 sitesine bağlanacaksak

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($chCURLOPT_URL,"http://ref5.net"); 

Şeklinde olacak. Burada curl_setopt fonksiyonu ile curl de yapacağımız işlemleri belirtiyoruz. Kullanımı şu formattadır;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt(curl_oturumu,yapılacak_işlem,işlem_değişkeni); 



Üstte yazdığımız CURLOPT_URL işlemi, gidilecek url adresini belirtir. Diğer işlemleri ileriki derslerimde göstereceğim.

En önemli kısım, curl_exec fonksiyonudur. Kullanımı şu şekilde;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_exec($ch); 

Yani içine işlemler tanımladığımız oturumumuzu işleme sokar, ve işlem sonundaki verileri gösterir. Bu şekilde kullandığımızda aldığı verileri direk ekrana yazdırır. Bunu önlemek için gelen verileri bir değişkene almamız gerekir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$veri curl_exec($ch); 

Bu şekilde gelen verileri $veri değişkenine aktardık. Daha sonra bu değişkende işimize yarayan kısımları ayıklayarak istediğimiz yerde kullanabiliriz.

Son olarak geldik curl oturumumuzu kapatmaya.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_close($ch); 

Şeklinde kodlamamızı bitiriyoruz.

Toparlarsak, genel kullanıma örnek bir kodla özetleyelim;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch curl_init(); // oturumumuzu açtık 
curl_setopt$ch CURLOPT_URL "http://ref5.net" ); // ref5 url sine bağlanma işlemi tanımladık 
$veri curl_exec($ch); // oturumu işleme soktuk ve gelen veriyi $veri değişkenine aldık 
curl_close($ch); // oturumu kapattık 
  
echo $veri// oturumdan gelen $veri değişkenini ekrana yazdırdık 

cURL Dersleri - Bölüm 2 - useragent ve referrer

Bir siteden veri çekmek her zaman kolay olmayabilir, önlemler alınmış olabilir. Örneğin browser bilgisi var mı yok mu diye kontrol edip bazı acemi botları engelleyebilir. Peki bunu nasıl aşarız ? Önceki dersimizde bahsettiğimiz curl_setopt fonksiyonuna CURLOPT_USERAGENT değişkenini ekleyerek. Şöyle ki;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt ($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19"); 



Şeklinde yazarız. Burada benim vermiş olduğum useragent dizisi chrome a aittir.

Şu adrese girerek browserınızın useragent bilgisini kısa yoldan alabilirsiniz.

Ayrıca php deki $_SERVER['HTTP_USER_AGENT'] değişkeni ile de elde edebilirsiniz. Bu arada dilerseniz useragent i sabit yapmayabilirsiniz, şu şekilde ayarlayarak dosyayı açan kullanıcının useragent bilgisini botta kullanmış olursunuz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt ($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']); 



Useragent engelini aştık, şimdi sıra referer engelinde. Referer nedir ? O dosyaya hangi adres aracılığıyla girildiği bilgisidir.

Örneğin, benim [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] de kullanıcı giriş formum var diyelim, formum /giris.php ye gönderiyor olsun bilgileri.

Ben giris.php dosyasında $_SERVER['HTTP_REFERER'] ile sadece [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] den gelenlerin giriş yapmasına izin veririm, diğer yerlerden girişi engellerim, böylece botlara karşı engel yaratırım.

Ama tabiki bunu curl ile kolayca aşabiliriz. Çünkü referer bilgisi browser üzerinde oluşan bir bilgidir ve curl de istediğimizi ayarlayabildiğimiz bir browser gibidir. Bu referer bilgisi hotlink korumasını aşmamıza da yardımcı olur.

Örneğin bir site resimlerinin sadece o sitede gösterilmesini sağlıyorsa, diğer sitelere koyunca hata resmi gösteriyorsa, referer bilgisinde kendi sitesinin adresini gönderdiğimizde bize hata göstermeyecektir.

Bunu CURLOPT_REFERER değişkeni ile tanımlarız.
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($ch,CURLOPT_REFERER,'
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 


Şeklinde kullanılır.

cURL Dersleri - Bölüm 3 - returntransfer , header ve followlocation

İlk dersimizde demiştik ki eğer curl_exec($ch) fonksiyonunu bir değişkene atamazsak yani şöyle $veri = curl_exec($ch); değil de curl_exec($ch); yazarsak direk ekrana yazar gelen verileri. Bunu istersek kapatabiliriz. Onun için;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt$ch CURLOPT_RETURNTRANSFER ); 



İşlemini tanımlarız. 1 veya true yazarsak ekrana basmaz, 0 veya false yazarsak ekrana basar.

Header ise girdiğimiz url den bize dönen header bilgilerini gelen veriye eklememizi sağlar.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt$ch CURLOPT_HEADER ); 




Yine 1 ve true yazılırsa açılır, 0 ve false yazılırsa kapanır. Header nedir ? Browsera giden komutlardır, yönlendirme, cookie vs gibi.

Genelde http kodu için kullanılır 200 ok mi 403 forbidden mi 404 not found mı 301 moved mi ona bakmak için. Örnek:

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch curl_init(); 
curl_setopt$ch CURLOPT_URL "http://t.co/UyEQQtTz" ); 
curl_setopt$ch CURLOPT_HEADER ); 
$veri curl_exec($ch); 
curl_close($ch); 
  
echo 
$veri



Çıktısı:

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
HTTP/1.1 301 Moved Permanently Date: Wed, 09 May 2012 21:48:30 GMT Server: hi Location: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] Cache-Control: private,max-age=300 Expires: Wed, 09 May 2012 21:53:30 GMT Content-Length: 0 Connection: close Content-Type: text/html; charset=UTF-8


Followlocation ise header da gelen yönlendirmeleri takip etme seçeneğidir.

Üstteki örnekte gördüğünüz gibi girdiğim linki location ile ref5.net e yönlendirmiş.

Ben tekrar CURLOPT_URL tanımlayıp oraya girebilirim ama bunu otomatik yapmak varken neden uğraşalım. Şu şekilde ayarladığımızda;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch curl_init(); 
curl_setopt$ch CURLOPT_URL "http://t.co/UyEQQtTz" ); 
curl_setopt$ch CURLOPT_FOLLOWLOCATION ); 
$veri curl_exec($ch); 
curl_close($ch); 
  
echo 
$veri



Kısaltılmış linkimizi açıp bizi otomatik ref5.net’e yönlendirecek, ardından ref5 in kaynak kodunu bize getirecektir.

Bu sadece kısa linklerde değil form girişlerinde de çok işimize yarayacak. Çünkü diyelim login formu dolduruyorsunuz, size sadece hesap.php ye yönlendirme kodu veriyorsa kaynak kodunuz boş görünecek, followlocation tanımladığınızda hesap.php ye de ulaşıp onun kodlarını döndürecek size.


cURL Dersleri - Bölüm 4 - timeout ve proxy

Timeout, zaman aşımı anlamına gelir.

Yani curl fonksiyonumuz belli bir süre içinde tamamlanmazsa, siteden cevap gelmezse yani, oturumumuzu otomatik kapatır ve dosyamızda gereksiz bekleme yaratmamış olur.

Bu kesinlikle dosyanın tamamını etkileyen bir timeout değildir, sadece o oturum içindeki süreyi kapsar, yani dosyanın geri kalan kodları çalışmaya aynen devam eder, die() komutu gibi değildir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($ch,CURLOPT_TIMEOUT,5); 



Şeklinde tanımlanır. Burada belirtilen 5 değeri saniye cinsindendir. Yani 5sn içinde cevap gelmez ise karşıdan, curl oturumu kapatılacaktır.

Özellikle birazdan göstereceğim proxy ile birlikte kullanmanızda yarar var, çünkü çalışmayan proxylerde fonksiyon uzun beklemelere girebilir, bunları timeout ile otomatik kapatabilirsiniz.

Proxy bağlandığımız sitede ip adresimizin gizlenmesine (farklı görünmesine) yardımcı olur.

Proxy kullanmak için ise 2 değişkenimiz var, biri proxy ip sini yazdığımız CURLOPT_PROXY değişkeni, diğeri de proxynin portunu yazdığımız CURLOPT_PROXYPORT değişkeni.

Önce güncel bir proxy bulmamız lazım, örnek olarak şu adresten edinebilirsiniz anlık olarak. Proxymizi aldıktan sonra şu şekilde uyguluyoruz;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt$ch CURLOPT_PROXY "177.103.139.64" ); 
curl_setopt$ch CURLOPT_PROXYPORT "3128" ); 



Sanıldığının aksine kullanılması son derece kolaydır.

Örnek olarak ip adresimizi gösteren bir siteye bağlanıp test edebiliriz bunu ;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch curl_init(); 
curl_setopt$ch CURLOPT_URL "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 
curl_setopt$chCURLOPT_TIMEOUT5); 
curl_setopt$ch CURLOPT_PROXY "177.103.139.64" ); 
curl_setopt$ch CURLOPT_PROXYPORT "3128" ); 
$veri curl_exec($ch); 
curl_close($ch); 
  
echo 
$veri



Burada timeout 5 verdim ki 5sn den geç tepki veren ip adresini otomatik kapatsın diye.

Bu proxy işlemlerini değişken ile uygularsak, döngüye sokup timeout ile sağlam olanlarını da ayıklayabiliriz. Sizin yaratıcılığınıza kalmış artık gerisi.


cURL Dersleri - Bölüm 5 - post ve get metoduyla form gönderme

Önceki derslerimizde hep karşıdan veri çekmeyi gördük, bu dersimizde ise siteye veri göndereceğiz.

Gönderilecek veri için iki metodumuz var, biri GET diğeri ise POST dur. GET kısaca url özerinden açık bir şekilde gönderilir (örneğin; site.com/index.php?id=123 gibi), POST ise genellikle form doldurmada (üyelik giriş formu, mesaj gönderme formu vb.) uygulanan gizli veri gönderimidir.

İlk önce GET veri gönderimine bir örnek verelim, gayet basittir kullanımı;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$get_verileri "id=123&sayfa=2"
$ch curl_init(); 
curl_setopt$ch CURLOPT_URL "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">.
$get_verileri ); 
$veri curl_exec($ch); 
curl_close($ch); 



Gördüğünüz gibi URL işlemininde sitenin sonuna “?” den sonra uyguluyoruz ve her değişkenin arasına & işaretini koyuyoruz. Şu şekilde de yazılabilir;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt$ch CURLOPT_URL "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">.
$id_degiskeni."&sayfa=".$sayfa_degiskeni ); 



Tamamen size kalmış, uzatmıyorum.

POST metodunu kullanabilmek bu kadar basit değildir, işin içine gizli değişkenler de girebiliyor çoğu zaman. Örnek formlar ile açıklayacağım bunu.
İlk formumuz;

Formun bulunduğu adres: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] olsun

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<form action="giris.php" method="post" > <input type="text" name="user"> <input type="password" name="pass"> <input type="submit" name="giris" value="Tamam"> </form>

Bize ilk lazım olan şey, formun nereye gönderildiği. Bunu action dan öğreniyoruz, yani giris.php imiş.

O zaman curlopt_url değişkeni giris.php ye gidecek. Daha sonra inputlara bakıyoruz. 3 tane input var.

Bunların name değerlerini alacağız. user, pass ve giris değişkenleriymiş. giris değişkeninin değeri (value) “Tamam” olarak verilmiş dikkat edin.

Şimdi curl ile nasıl göndereceğimize bakalım;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch=curl_init(); 
curl_setopt($ch,CURLOPT_URL,"
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,"user=caqlayan&pass=123456&giris=Tamam"); 
$veri curl_exec($ch); 
curl_close($ch); 



Şeklinde olur. Yani CURLOPT_POST ile post tipinde veri göndereceğimizi belirtiyoruz, ardından CURLOPT_POSTFIELDS ile değişkenlerimizi yazıyoruz aralarına & koyarak.

Post değişkenlerini isterseniz dizi olarak da gönderebilirsiniz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$post_dizisi = array( 
"user" =>"caqlayan"
"pass"=>"123456"
"giris"=>"Tamam" 
); 
curl_setopt($chCURLOPT_POSTFIELDS$post_dizisi); 



Şeklinde kullanabilirsiniz. Dizi ile göndermenin daha kullanışlı olduğunu söyleyebilirim.

Bir başka form örneği;
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<form action="index.php?do=login" method="post" > <input type="hidden" name="guvenlik" value="a1b2c3"> <input type="text" name="user"> <input type="password" name="pass"> <input type="submit" name="giris" value="Tamam"> </form>

Burada action ile get verisi de tanımlanmış. Onu ne yapıyoruz ?

Hemen url kısmına ekliyoruz. Ardından inputlara bakıyoruz.

Type hiç önemli değil, eğer name değeri atandıysa o değişken gidiyor demektir. Bu formda bir guvenlik adında gizli değişken var. Onu da göndereceğiz.


PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch=curl_init(); 
curl_setopt($ch,CURLOPT_URL,"
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,"guvenlik=a1b2c3&user=caqlayan&pass=123456&giris=Tamam"); 
$veri curl_exec($ch); 
curl_close($ch); 



Bu kadar basit. Yalnız dikkat edilmesi gereken birşey var, botları engellemek için koyulan bu gizli guvenlik değişkenleri sadece o oturumda geçerli olacaktır.

Bunun için curl oturumunu kapatmadan önce siteye bağlanıp veriyi çekmeli, ardından guvenlik değişkenini bulup almalı, ondan sonra formun verilerini göndermeliyiz. Örnek kullanım;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$ch=curl_init(); 
curl_setopt($ch,CURLOPT_URL,"
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 
$veri1 curl_exec($ch); // formun kaynak kodunu aldım 
preg_match('/name=\"guvenlik\" value=\"(.*?)\"/'$veri1$guvenlik); 
// guvenlik değişkenimin değerini kaynaktan çektim 
curl_setopt($ch,CURLOPT_URL,"
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,"guvenlik=".$guvenlik[1]."&user=caqlayan&pass=123456&giris=Tamam"); 
$veri2 curl_exec($ch); 
// formu guvenlik değişkeni ile birlikte gönderdim 
curl_close($ch); 



Bir oturum içinde istediğimiz kadar curl_exec fonksiyonu kullanabiliriz.

Bu arada sadece input değil form içindeki textarea lar da form ile gider, özellikle mesaj bölümleri textarea ile verilir. Örnek;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<textarea name="mesaj"></textarea>

Gibi bir textarea varsa name de yazan mesaj değişkenini de post ile göndermemiz gerekir.

cURL Dersleri - Bölüm 6 - cookies ve ssl

Curl ile https yani ssl sertifikalı sayfalara bağlanmak için en kestirme yol aşağıdaki gibidir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse); 



Bu ayarı yapınca ssl doğrulamasını kapatmış oluyoruz ve önümüzdeki engel kalkmış oluyor, CURLOPT_URL kısmına https:// şeklinde url mizi yazıp işlemlerimize devam ediyoruz.

Gelelim cookie olayına. Bazı botlarda sitelere login olmamız gerekiyor. Ve bildiğiniz gibi giriş yaparken “beni hatırla” kutucukları vardır. Onları seçince size bir cookie verir, o cookie sizin browserınızda olduğu sürece siteye girdiğinizde login olmuş kabul eder sizi, tekrar tekrar login olmazsınız.

Curl ile de aynı şeyi yapacağız. Bunun için biz cookie dosyamız olacak, cookie bilgilerimiz içine kaydedilecek, gerektiğinde oradan okunacak. O dosyamız cookie.txt olsun.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookies.txt"); 
curl_setopt($ch,CURLOPT_COOKIEFILE,"cookies.txt"); 



Şeklinde kullanılır.

Buradaki CURLOPT_COOKIEJAR bize curl oturumumuz kapatıldığında bize gelen cookie değerlerinin kaydedileceği dosyayı belirtir, CURLOPT_COOKIEFILE ise oturumda göndereceğimiz cookie değerlerinin olduğu dosyayı belirtir. İkisini de aynı dosyaya tanımlamak en kullanışlı olan ayardır. Bu cookie dosyası sayesinde siteye bir kere login olduğumuzda, tekrar login olmaya gerek kalmadan site içinde dolaşabileceğiz.

Sadece dosya ile değil, istersek cookie değerlerini elle de girebiliriz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
curl_setopt($ch,CURLOPT_COOKIE,"userid=1;giris=ok"); 



Gördüğünüz gibi CURLOPT_COOKIE işlemine cookie_ismi=cookie_degeri şeklinde cookie değişkenlerimizi araya ; koyarak yazıyoruz. Bu kadar basit.

Genel anlamda işimize yarayacak curl kodları bu şekilde.
İşinize yarayanı seçip kullanmak size kalıyor

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
curl, dersleri, detaylarıyla, php, tüm


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
C++ Dersleri toXic C ve C++ 18 06 Mayıs 2020 03:50
Aşk Dersleri SeytaninOrkestrasi Şiir, Hikaye ve Güzel Sözler 1 05 Nisan 2010 01:20
PHP Dersleri 4 KraLiSHE PHP 0 21 Mart 2009 14:20
PHP Dersleri 3 KraLiSHE PHP 0 21 Mart 2009 14:17