• Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha fazla bilgi edin.

PHP Curl Kullanımı

Konuyu Okuyan Kişiler (0)

inforesim

webmaster.tc
Katılım
4 Ağu 2012
Mesajlar
2,439
Beğeniler
0
#1
Siteye erişim yöntemlerinden biri de Curl dur, Her ne kadar file_get_contents işlev yönünden benzerlik gösterse de, Curl ile Bir tarayıcı taklit edebilir ve Üye girişi gibi işlemleri basitçe gerçekleştirebiliriz. Bildiğiniz gibi veri gönderme yöntemleri olarak GET ve POST bulunmaktadır. Sizlere bu gün, Curl aracılığıyla Hem GET yöntemiyle veri gönderme, Hem de POST yöntemiyle veri göndermeyi anlatacağım.

İlk olarak sizlere, Normal şekilde bir siteye bağlanmanız için CURL fonksiyonu paylaşacağım.

PHP:
<?php
	function wmtc($url){
		$ch = curl_init();
		$timeout = "5";
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_HEADER,false);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
		curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch,CURLOPT_REFERER,"http://www.google.com.tr");
		curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER["HTTP_USERAGENT"]);
		$data = curl_exec($ch);
		curl_close($ch);
		return $data;
	}
echo wmtc("http://www.webmaster.tc/index.php");
?>
Şimdi buradaki kodları açıklamamız gerekirse ;

CURLOPT_SSL_VERIFYPEER => SSL sertifikamızın olmadığını söylüyoruz, Bu sayede https:// sayfalarla iletişime geçebiliyoruz.

CURLOPT_RETURNTRANSFER => Eğer bu değeri 1 yapmaz iseniz, Bir fonksiyon da echo kullanmış gibi sonucu değişkene atayamazsınız. Yani direk ekrana basılır (siz echo demeseniz bile) onun için bunu 1 veya true yapmanız gerekir.

CURLOPT_CONNECTTIMEOUT => Burada da siteden kaç sn tepki bekleyeceğini yazıyoruz, Yani $timeout değişkeni 5 e eşit olduğun için eğer 5 sn de site tepki vermez ise işlemi sonlandıracak.

CURLOPT_FOLLOWLOCATION => En önemli özelliklerden biri de bu, Bu özellik sayesinde yönlendirmeleri otomatik takip edebilirsiniz. Yani a.com sayfasına girdiğiniz de, sizi a.com/a.php sayfasına yönlendiriyorsa curl bunu takip etmez. Ama CURLOPT_FOLLOWLOCATION özelliği sayesinde, Otomatik olarak yönlendirmeyi takip ettirip o sayfanın kaynağını size verecektir.

Dikkat ! Bu özellik için sunucunuz da ayar gerekebilir, Onun için eğer ihtiyacınız yok ise ve Sunucunuz da followlocation ile İlgili bir hata çıktı ise O satırı silebilirsiniz. Eğer gerekli ise ve Hata veriyor ise open_base açmanız gerekmektedir (Hatayı hostcunuza verirseniz o çözer).

CURLOPT_REFERER => Kişinin sitesine hangi siteden geldiğimizi söylüyoruz, Yani siz de sayaçlarınızı incelerken görürsünüz şu adresden gelmiş şeklinde, Burada da geldiğimiz adresi gösteriyoruz.

CURLOPT_USERAGENT => Burada da kişinin sitesine girerken, Kullandığımız tarayıcı hakkında bilgi veriyoruz. HTTP_USERAGENT kullandığım için bu php sayfasını kim görüntüler ise Onun tarayıcı bilgileri yansıyacaktır. Buda, Her seferinde aynı bilginin gitmesini engelleyecektir.

file_get_contents, Curl dan daha fazla sunucuyu yorduğu için ve Çok basit şekilde engellenebileceği için, Yukarıdaki fonksiyonu botlarınız da kullanabilirsiniz. Bu sayede, Daha hızlı / Daha güvenli şekilde performans alabilirsiniz. (Eğer genel bir kod yazacak iseniz, Mutlaka followlocation kaldırın. (İhtiyacınız yoksa) aksi taktir de her hostta çalışmayacaktır).

Şimdi de, Curl ile Get veri göndermeye bakalım.

CURL ile GET Yöntemiyle Veri Gönderme
Zaten, Yukarıda hangi kod ne işe yarıyor şeklinde açıklamıştık. Aslında POST ve GET olarak ikiye ayırmanıza gerek yok. Çünkü get ile Göndereceğiniz veriyi url satırında tanımlayabilirsiniz. Yani yukarıdaki fonksiyonu ele alırsak,

PHP:
<?php
echo wmtc("http://www.webmaster.tc/index.php");
?>
Yukarıdaki şekilde, webmaster.tc nin index.php sine giriyoruz ve Diyelim index.php giriş için bizden kullanıcı adı ve Şifre istiyor. Bunların textbox isimleri ise

kadi
sifre

Olsun ve Bunları webmaster.tc/index.php?kadi=kullanıcı adı&sifre=şifre şeklinde istiyor. Tek yapmanız gereken aşağıdaki gibi girmek.

Dikkat ! Hangi değerleri göndereceğimi nasıl bileceğim diyorsanız, Makalenin sonunu inceleyin.

PHP:
<?php
echo wmtc("http://www.webmaster.tc/index.php?kadi=kullanıcı adı&sifre=şifre");
?>
CURL ile POST Yöntemiyle Veri Gönderme
CURL ile POST ederek veri göndermek de aslında çok basit, Tek yapmanız gereken 2 satır kod eklemek ve Get yöntemiyle gönderir gibi ayrı satır da alan adını ve Alana eşit olan veriyi yazmak. Yukarıdaki fonksiyona aşağıdaki şu 2 satırı ekliyoruz.

PHP:
<?php
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,"kadi=ahmet&sifre=şifre");
?>
Yukarıdaki get mantığıyla aynı şekilde, Get te nasıl ?kadi=kullanıcı adı&sifre=şifre sadece başındaki ? silip, "CURLOPT_POSTFIELDS" a yazıyoruz ve GET değil de POST ederek verimizi karşıya gönderiyoruz. Özellikle post işlemlerinde, Followlocation kullanmanız gerekir (Sayfa yönlendirmesi çok olduğu için).

Dikkat ! Fonksiyondaki bağlanılacak site adresine de, Post edilecek sayfa adresini yazıyoruz. Bunu da konu sonunda belirtilen tamper data ile Hangi php veya Hangi adrese postlanmış görebilirsiniz.

Hangi Alan Neye Ait Nasıl Anlayacağız ?
Şimdi sizlere bunu, Kaynak dan 2 saatte nasıl bulacağınızı anlatırdım ama hiç gerek yok :) Çünkü bunun için Firefox da biçilmiş bir kaftan var ! Adı tamper data eklentisi.

http://www.webmaster.tc/mozilla-firefox-eklentileri/mozilla-firefox-tamper-data-eklentisi-3649.html

Yukarıdaki adres de resimli şekilde, Bir formu gönderdikten sonra hangi alanda hangi yazdığımız yazı gitmiş görebilirsiniz. Bu sayede, Alanlara ve Hangi alana ne eşit gitmiş anlayarak post işleminizi yapabilirsiniz.

POST veya GET in nasıl olduğunu anlamak için de eğer form da veri gönderdikten sonra, Yazdığınız şeyler url satırın da gitmediyse POST dur. Eğer URL den gittiyse get dir.