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.