EasyPHP Localhostta cURL Atif Etmek (Anlatım)

xtape

OpenCart-TR
Katılım
7 Tem 2010
Mesajlar
9
Tepkime puanı
0
Puanları
0
Nette curl hakkında tatmin edici bir türkçe bilgi bulamadığım için bu konuyu açıyorum. ben ingilizce kaynaklardan öğrendim ama herkesin de ingilizce bilmesi gibi bir durum yok ve ana dilinde olursa herkes anlar diye düşündüm. konu hakkında bilgisi olup eksik kısımları tamamlayanlara şimdiden teşekkürler.

Kurulum:

öncelikle Client URL (CURL) kitaplığının (library) kurulumuna bakalım. Ben easyphp[/URL (http://http://sourceforge.net/projects/quickeasyphp/)] kullandığım için ona göre anlatacağım ama diğer paketlerde de pek farklı değildir. saatin yanındaki easyphp simgesine sağ tıklayıp configuration-php ye tıklıyoruz. karşımıza php.ini dosyası çıkar. sonra ctrl+f diyerek "curl" kelimesini aratıyoruz -tırnaklar olmadan-. ";extension=php_curl.dll" satırına gidip başındaki ; işaretini siliyor ve kaydediyoruz -eğer ; yoksa zaten curl kütüphanesi aktiftir-. daha sonra easyphp yi yeniden başlatıyoruz ve artık local de curl komutlarını kullanabiliriz. eğer host satın aldıysanız bu işlemi sizin için hosting firmanız yapar. aşağıdaki kodu bir php sayfasına yazıp server a yükleyin ve çalıştırın. karşınıza php de kurulu olan kütüphaneler ve bir çok bilgi gelir. sayfada curl un aktif olup olmadığını da görebilirsiniz. dediğim gibi kurulu değilse yani sayfada curl diye birşey yoksa veya altında disabled gibi bir yazı varsa hostçunuzla irtibata geçin.
Kod:
<?php
phpinfo();
?>[U]Komut seti:
curl_init
bu komut ile bir curl session ı başlatıyoruz. curl ile işlem yapabilmek için kullanmak zorundayız. ilk satıra bu komutu yazıp diğerlerini altına yazıyoruz. eğer öncesinde curl komutları kullanırsak çalışmayacaktır. bir sayfada 1'den fazla curl tanımlıyacaksak aynı sayıda curl_init bulunmalıdır. en çok kullanım şekli parametresiz kullanımdır.
Kod:
$ch=curl_init();$ch
değişkeni bizim curl kodumuzun adı. siz dilediğiniz adı verebilirsiniz.
curl_close
curl_init ile açmış olduğumuz session ı kapatır. üst satırda oluşturduğumuz session ı kapatmak için
curl_close($ch);yazarız. eğer $ch yerine başka bir isim verdiyseniz onu yazmalısınız. curl komutlarımız curl_init ile curl_close arasında yer alırlar. aynen her html sayfasının başında ve sonunda <html> ve </html> tagları kullanmak gibi.
curl_setopt
en çok kullanacağımız curl komutu. burada oluşturduğumuz curl e parametre değerleri atıyoruz. yani hangi siteye bağlanacağı, hangi değişkenleri göndereceği gibi.
CURLOPT_URL
bununla hangi siteye/sayfaya bilgilerin gönderileceği belirtilir. örnek olarak:
curl_setopt($ch, CURLOPT_URL,
"burada'>http://uni1.ogame.com.tr/game/reg/login2.php");burada ogame 1. evrene giriş yapmak için kullanılan sayfaya bilgileri göndericez. unutmayın buraya girilecek adres bilgileri elle girdiğiniz sayfa değil bilgilerin gönderileceği post edileceği sayfa olmalı. eğer keha.net e giriş yapacak olsaydık www . keha . net/index.php yerine www . keha . net/login.php?do=login yazacaktık. bunu da şuradan öğrendik. www . keha . net/index.php sayfasına girdikten sonra -üye girişi yapmadan- sayfanın kaynağına bakıyoruz ve normalde sağ üstte duran giriş formunun kodlarına bakıyoruz. <form action="" method="post".... gibi bir ifade göreceksiniz. buradan bilgilerin hangi sayfaya nasıl gönderildiğini bilgisini alırız.
CURLOPT_HEADER
bu parametre curl ile elde edeceğimiz çıktının başına header bilgisinin eklenmesini sağlar. header içerisinde birçok bilgi yer alır. sunucu saati, sunucu sürümü, içeriğin byte olarak boyutu vs. ama bizim en çok işimize yarayan cookie değişkenleride header bilgisi ile gönderilir. örneğin keha'a girince bize şöyle bir header gönderilir.
HTTP/1.x 200 OK
Date: Fri, 08 Feb 2008 18:16:42 GMT
Server: Apache/2.2.3 (Debian) PHP/4.4.4-8+etch4
X-Powered-By: PHP/4.4.4-8+etch4
Set-Cookie: kehalastactivity=0; expires=Sat, 07 Feb 2009 18:16:42 GMT; path=/; domain=.keha.net
Set-Cookie: kehauserid=3584; expires=Sat, 07-Feb-2009 18:16:42 GMT; path=/; domain=.keha.net; HttpOnly
Set-Cookie: kehapassword=silinmiştir; expires=Sat, 07-Feb-2009 18:16:42 GMT; path=/; domain=.keha.net; HttpOnly
Set-Cookie: kehasessionhash=silinmiştir; path=/; domain=.keha.net; HttpOnly
Cache-Control: private
Pragma: private
Keep-Alive: timeout=300
Connection: Keep-Alive
Content-Type: text/html; charset=ISO-8859-9
Vary: User-Agent, Accept-Encoding
Content-Encoding: gzip
Content-Length: 1355
burada Set-Cookie ile başlayan satırlar bize gönderilen cookie lerdir. daha sonra bu bilgileri kullanacağız. curlopt_writeheader da bundan bahsedeceğim.
genel kullanımı şöyle;
curl_setopt($ch, CURLOPT_HEADER, 1);burada 1 kullanarak header bilgisinin çıktıya eklenmesini sağladık. eğer istemiyorsak 0 kullanırız.
CURLOPT_POST
bu parametre ile bilgileri POST edeceğimizi belirtiyoruz. Bir çok giriş formu güvenlik sebebiyle bu yöntemi kullanır. formun hangi yöntemi kullandığını kaynak koda bakarak görebiliriz. keha'a bakarsanız <form action=http://www.keha.net/login.php method="post".... satırında post metodunun kullanıldığını görebilirsiniz. bilgilerin post edileceğini belirtmek için kodu şu şekilde yazıyoruz;
curl_setopt($ch, CURLOPT_POST, 1); CURLOPT_POSTFIELDS
bir önceki parametre ile bilgilerin post edileceğini belirtmiştik. bununla ise bu bilgilerin neler olduğunu belirteceğiz. eğer ogame için düşünürsek şöyle bir satır yazacaktık:
Kod:
curl_setopt($ch, CURLOPT_POSTFIELDS,"v=2&universe=uni1.ogame.com.tr&login=MC_delta_T&pass=şifrem");
burada yazan universe,login,pass alanları sayfanın kaynak koduna baktığımızda gördüğümüz isimler. kaynak kodunda <input ile başlayan kısımlara bakarsanız orada name adında bir parametre görürsünüz. keha'da bunların adı vb_login_username, vb_login_password şeklindedir. kullanıcı adınızı yazdığınız kutucuğun adı vb_login_username, şifreninki ise vb_login_password. tabii bunların yanında hidden tipinde sayfada gözükmeyen ama kaynak kodunda varolan başka alanlarda var ve bunları da kullanmak zorundayız. eğer ogame.com.tr ye girerseniz. 1 adet evren seçim menüsü -adı universe-, 1 adet k. adı giriş kutucuğu -adı login-, 1 adet şifre giriş kutucuğu -adı pass- görürsünüz. kaynak koduna bakarsanız hidden tipinde v adında bir bölüm daha olduğunu görürsünüz. işte yukarıdaki kodda bütün bu alanları kullandık ve değerlerini de yazdık. kaynak koduna bakarsanız ilk 2 -v ve universe- değerin nereden geldiğini anlarsınız.
CURLOPT_WRITEHEADER
bu parametre ile bize gönderilen header bilgisini bir dosyaya yazıyoruz. daha öncede bahsettiğim gibi header ile bize cookie değişkenleri gönderiliyor ki daha sonraki girişlerimizde site bizi otomatik tanısın. böylece sadece üyelere açık sayfalarda rahatça cirit atabilelim. header bilgisini dosyaya yazdıktan sonra içerisinden cookie bilgilerini alıp kullanacağız. bu yüzden boş bir txt belgesi oluşturup adresini yazıyoruz bu parametreye;

Kod:
$cookie_new = fopen ("cookie.txt", "w");
curl_setopt ($ch, CURLOPT_WRITEHEADER, $cookie_new);
ilk satırdaki fopen ile cookie.txt dosyasını yazılabilir olarak -w den dolayı- açtık.

CURLOPT_FOLLOWLOCATION

bu parametre ile yönlendirmelere izin vermiş oluyoruz. yani sayfaya giriş yaptıktan sonra çok büyük ihtimalle bizi anasayfaya veya başka bir sayfaya yönlendiren kodlara izin veriyoruz. örneğin keha.net'e giriş yaparsanız login.php sayfası sizi bir önceki sayfanıza yönlendirir. yani hangi sayfada giriş formunu doldurduysanız ona. izin vermek için 1, engellemek için 0 değerini kullanıyoruz.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
CURLOPT_COOKIE

bu parametre ile bize header da gönderilen ve set-cookie ile belirtilen satırdaki cookie bilgisini kullanacağız. eğer bu bilgiyi sağlamazsak site bizi giriş yapmamış biri olarak değerlendirecektir. curlopt_writeheader ile yazdığımız dosyayı alıp içinden cookie bilgisini çekerek burada kullanacağız. örnek olarak şöyle bir satır yazabiliriz. burada kehauserid cookie değişkeninin adı 3584 ise değeridir.
curl_setopt($ch,CURLOPT_COOKIE,"kehauserid=3584"); bu anlattıklarımın dışında birçok parametre bulunmakta fakat en çok işinize yarayacakları anlatmaya çalıştım.
curl_exec
şimdi ayarlarını yaptığımız curl session ını çalıştırıyoruz. yani bilgileri gönderip cevabı alıyoruz. şu şekilde kullanılır.
$sayfaicerik= curl_exec($ch);$sayfaicerik değişkeninde işlem sonunda oluşan çıktıyı saklıyoruz.
şimdi ogame.com.tr ye giriş yapacak örnek bir proje yazıyorum.
eğer sizde denemek isterseniz bilgisayarınıza bir hazır paket kurarak php-apache-mysql üçlüsünü hazır ve çalışır hale getirmeniz işinizi kolaylaştırır. gerçi mysql i kullanmayacağız ama ileride gerek duyabilirsiniz. neyse kurduğunuzu ve hazır hale getirdiğinizi varsayarak devam ediyorum.
temel olarak 4 adet dosya kullanacağız:

-cookie.txt
-curlgiris.php
-curlson.php
-index.php

ve bu dosyaların hepsini kök dizinin altında oluşturacağımız game adlı klasörde bulunduracağız. aslında sadece index.php nin burada durması zorunlu diğerlerini istediğiniz yerde bulundurabilirsiniz. ama kolaylık olması açısından aynı klasörde bulunması iyi olur. bu projede hepsinin aynı klasörde bulunduğu varsayılacaktır.
dosyaların işlevlerine gelince; cookie.txt dosyası bize header da gönderilen bilgileri saklayan ve cookie bilgilerini alacağımız dosya. curlgiris.php de ogame kullanıcı adı ve şifremizi kullanarak giriş yaptırtacağımız dosya. index.php ise ogame in default olarak yönlendirdiği dosya. daha sonra biz buradan curlson.php ye yönlendirme yaparak ogame de gezineceğiz.
önce curlgiris.php

Kod:
$uname = "MC_delta_T";
$pass = "******";
$ch = curl_init();
$cookie_new = fopen ("cookie.txt", "w");
curl_setopt($ch, CURLOPT_URL, "http://uni1.ogame.com.tr/game/reg/login2.php");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"v=2&universe=uni1.ogame.com.tr&login=".$uname."&pass=".$pass);
curl_setopt ($ch, CURLOPT_WRITEHEADER, $cookie_new);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$icerik = curl_exec($ch);
echo $icerik;
fclose ($cookie_new);
curl_close($ch);
burada k.adı ve şifremiz ile 1. evrene giriş için gerekli kodlar var. gelen header bilgisini cookie.txt ye yazdık ve ekranda da sadece bu header bilgisi vardı. çünkü login2.php sayfası başka bir çıktı üretmiyor index.php ye yönlendiriyor.
ikinci olarak index.php. unutmayın kök dizin içinde game adlı klasörde olmalı.

Kod:
<html>
<head>
<meta http-*****="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<?php
echo '<meta http-*****="refresh" content="0; url=curlson.php?session='.$_GET['session'].'"/>';
?>
</head>
<body>
</body>
</html>
burada index.php den curlson.php ye yönleniyoruz. tabii adres satırındaki session bilgisinide kullanacağımız için onu da aynen iletiyoruz. ekrana herhangi bir çıktı göndermiyoruz.
son olarak curlson.php
Kod:
$session =$_GET['session'];
$dosya = fopen('cookie.txt','r');
$icerik = fread($dosya, filesize('cookie.txt'));
$dizi = (explode("Set-Cookie: ",$icerik));
$session1=(explode(";",$dizi[1]));
$session1['0'] = trim($session1['0']);
$session2=(explode(";",$dizi[2]));
$session2['0'] = trim($session2['0']);
$session3=(explode(";",$dizi[3]));
$session3['0'] = trim($session3['0']);
$cookie = $session2['0']."; ".$session3['0']."; ".$session1['0'];
$evrendizi = explode(":",$session3['0']);
$evren = str_replace("U_tr","",$evrendizi['0']);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://uni".$evren.".ogame.com.tr/game/index.php?page=overview&session=".$session);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_COOKIE,$cookie);
$sayfaicerik= curl_exec($ch);
$satirlar = explode ("toplam",$sayfaicerik);
$sayi = explode ("oyuncu",$satirlar['1']);
$final = trim($sayi['0']);
curl_close($ch);
burada öncelikle cookie.txt dosyasından cookie bilgisini alıyoruz. daha sonra yine aynı değişkenleri kullanarak kaçıncı evren olduğu bilgisinide ordan alıyoruz. eğer tek bir evren için kullanacaksak o satırları iptal edip $evren değişkenine sabit bir değer atayabilirdik. daha sonra genel durum sayfasına -index.php?page=overview- gidip oradan evrendeki oyuncu sayısını ekrana bastırdık. tabii bu örnek olması açısından kolay bir işlemdi. ama siz hayal gücünüzü kullanarak dilediğiniz sayfaya girip dilediğiniz işlemi yaptırtabilirsiniz. aynı şekilde diğer sitelerede giriş yaptırıp otomatik olarak istediğiniz işlemleri yaptırtabilirsiniz. örnek olarak bütün konularınızı bir klasör altında dosyalara kaydedip tek tıkla foruma mesaj olarak yollayabilirsiniz. daha sonra insan kaynakları bölümüne gidip 100 kontöre 1000 mesaj atılır, 5 domaine 100 konu açılır gibi başlıklar açabilirsiniz

(DTWeb den alıntıdır.. )
 
Üst