PHP Curl Kullanımı

Bu yazımızda, bot yapımlarında en çok ihtiyaç duyulan API Curl kütüphanesini tanıyacağız.

CURL api’si bizlere GET-POST-DELETE-PUT isteklerini sertifakalı(ssl) ya da sertifakasız çağrılar yapmamıza , karşıya dosya yüklememize olanak sağlar ayrıca http, https, ftp, gopher, telnet, dict, file ve ldap protokollerini desteklemektedir.

CURL ile neler yapılabilir ?

Uzak sunucudaki verileri kendi sunucumuza çekebilir,

X sitesinde oturum açabilir, çerezleri kaydedebilir.

HTTP-HTTPS web sayfa kaynağını görüntüleyebilir.

Trade botu, kargo takip botu , fiyat analiz botu , indirim botu ve aklımıza gelebilecek sürekli tekrar eden işleri otomatize edilebiliriz.

Öyleyse öğrenmeye başlayalım;

Tarayıcıda curl_init() ile oturum başlatılır curl_close($ch) ile başlatılan oturum sonlandırılır. curl_setopt ile tarayının özelliklerini tanımlarız.

Bağlanacağımız sayfanın tanımı ;

curl_setopt($ch, CURLOPT_URL, $url);

Bir location yönlendirmesini izleyen bir isteğin referer başlığının otomatik olarak atanması için  true olmalıdır.

curl_setopt($ch,CURLOPT_AUTOREFERER, true);

Aktarımı doğrudan ekrana bastırmak yerine exec’de geri döndürmek için;

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

Tarayının farklı bir aygıt gibi görünmesini istiyorsak

curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.456')

User-agent adresinden aygıt listesine erişebilirsiniz.

Geri dönüş süresini 5 saniye için kısıtlamaya biliriz böylece sunucunun geri dönüş süresinin azami süresini belirleriz.

   curl_setopt($ch, CURLOPT_TIMEOUT, 5);

Üst bilgisini CURLOPT_HTTPHEADER ile düzenleyebiliriz.

$header =  array(
    'Content-type: application/xml',
    'Authorization: deneme-bir-ki',
    'Cookie: xcsrf-token=denemebirki'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

Örnek kod ile web sayfamızın içeriğini alalım

        curl_setopt($ch, CURLOPT_URL, "https://masterdark.net");
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.456');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch,CURLOPT_AUTOREFERER,1);        
        $data = curl_exec($ch);

curl_exec yaptığımızda CURLOPT_RETURNTRANSFER true olduğundan sayfa kaynağı $data değişkenine atanır.

peki durum koduna erişmek istediğimizde ne yapacaktık ?

$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

$httpcode ile response koduna erişebiliriz. Son olarak bağlantıyı kapatmayı unutmuyoruz.

curl_close($ch);

CURL ile file get contents farkı

file_get_contents () basit bir tornavidadır. Başlığın, HTTP istek yönteminin, zaman aşımının, cookiejar, yönlendirmelerin ve diğer önemli şeylerin önemli olmadığı basit GET istekleri için idealdir.
Ek olarak cURL file_get_contents 'e göre 2 kat daha hızlı ve işlevseldir.

CURL POST İşlemleri

X web sayfasında oturup açıp cookie bilgilerini cookie.txt dosyasına kaydedelim.

$postinfo = [
    "username" => "admin",
    "password" => "123456"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, "https://masterdark.net/");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');

curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postinfo));
curl_exec($ch);

//page with the content I want to grab
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/page/");
//do stuff with the info with DomDocument() etc
$html = curl_exec($ch);
curl_close($ch);

Oturum bilgilerini kaydettiğimze göre CURLOPT_COOKIEFILE niteliği ile dosyamızı isteğimize dahil edebiliriz.

 curl_setopt($ch, CURLOPT_URL, "https://masterdark.net");
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.456');
 curl_setopt($ch,CURLOPT_COOKIEFILE,dirname(__FILE__) . '/cookie.txt');
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 5);
 curl_setopt($ch,CURLOPT_AUTOREFERER,1);        
 $data = curl_exec($ch);

böylece yalnızca yetkililerin görebileceği kaynağa erişmiş olduk.

Bu yazımızda CURL Kütüphanesi ile HTTP GET POST isteklerini göndermeyi öğrendik.

One Comment

Add a Comment

E-posta hesabınız yayımlanmayacak.