Php curl kullanımı, curl post, cookie, header gönderimi

Posted by krmylmz on 24 January 2019 Thursday 14:10:43

Merhaba sevgili okurlar, bu yazımda sizlere CURL kütüphanesinden bahsedeceğim, sizleri çok sayıda ki mevcut curl parametreleri ile boğmadan, herkesin ihtiyacı olan, standart curl ile veri çekme, curl ile bir url ye post gönderme, curl ile ssl bağlantı sorununu aşma, curl ile header bilgisi gönderme, curl ile cookie kullanımı gibi ana konulara değineceğim ve en kolay şekilde anlatmaya çalışacağım. localde çalışıyorsanız curl kurulu olmayabilir, hem curl için en sağlıklı ortam bir linux sunucuda çalışmanızı öneririm.

Öncelikle standart bir curl isteği oluşturalım.

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");
$sonuc = curl_exec($curl);
curl_close($curl);
echo $sonuc;

?>

curl_init ile bir curl isteğini başlattık, curl_setopt curl seçeneklerini ayarlamanıza yarayan fonksiyondur. 3 parametre alır, 1. curl isteği, yapılandırma ayarı, ve değeri CURLOPT_URL ile bağlantı sağlanacak url yi belirttik. sonra curl_exec(); fonksiyonu ile bu isteği çalıştırıp, sonuc isminde bir değişkene atadık, curl_close(); fonksiyonu ile ilk başka oluşturduğumuz curl isteğini kapattık. Bu en basit haliyle bir curl isteğidir. Birde curl ile bir url ye post gönderme işlemi vardır. bu işlem için CURLOPT_POST önce post gönderimini aktif etmemiz gerekir, daha sonra CURLOPT_POSTFIELDS parametresi ile, gönderilecek post verilerini tanımlarız.

 

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

$sonuc = curl_exec($curl);
curl_close($curl);
echo $sonuc;

?>

Örnek kodda gördüğümüz gibi, sadece 2 satırlık bir fark var, post aktifleştirilir ve gönderilecek post değerleri girilir. post edilen url de gelen postları dump ettirebilirsiniz bu şekilde görerek denemeler yapabilirsiniz. Örnek http://www.kerimyilmaz.com.tr/postgoster.php url sine post ettiğinizi düşünürsek, bu postgoster.php içersine,

<?php
var_dump($_POST);
?>

kodunu eklerseniz gelen postları ekrana basacaktır.


Şimdi bir diğer konu curl ile bazen https sayfalarına bağlantılarda sorun yaşayabilirsiniz. bunun içinde curl de 2 adet paramteremiz mevcut, ssl doğrulamasını kapatabilirsiniz. CURLOPT_SSL_VERIFYHOST ve CURLOPT_SSL_VERIFYPEER bu parametreleri false yapabilirsiniz.

 

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$sonuc = curl_exec($curl);
curl_close($curl);
echo $sonuc;
?>


Bir diğer konuda curl ile cookie kullanımı, aslında oldukça basit bir konudur, cookie işlemide tıpkı post işlemi gibidir. CURLOPT_COOKIE değeri ile dilediğimiz cookie değerini tanımlayabiliriz.

 

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_COOKIE, "cookie_ismi=cookie_degeri;");

$sonuc = curl_exec($curl);
curl_close($curl);
echo $sonuc;
?>

Söz konusu url ye bağlantı sağlandığında artık, cookie_ismi=cookie_degeri tanımlı bir cookie ile bağlantı sağlayabilirsiniz. Şu ana kadar şuna dikkat etmiş olmalısınız, bu kodları denediğinizde echo demesenizde curl ekrana basacaktır çıktıyı, bunu çözmek için, CURLOPT_RETURNTRANSFER yani çıktıyı exec ten aktarmayı aktif etmemiz gerekir.

 

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_COOKIE, "cookie_ismi=cookie_degeri;");

$sonuc = curl_exec($curl);
curl_close($curl);
echo $sonuc;
?>


Peki cookie göndermeyi öğrendik, ancak cookie yi nasıl alacağız derseniz curl istemcisinden header bilgisini talep edebiliriz. cookie de bir header bilgisidir. Bunun için CURLOPT_HEADER aktif etmemiz yeterli olacaktır.

 

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_HEADER, true);


curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_COOKIE, "cookie_ismi=cookie_degeri;");

$sonuc = curl_exec($curl);
curl_close($curl);


preg_match_all('/^Set-Cookie:s*([^;]*)/mi', $sonuc, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
var_dump($cookies);
?>

Elde ettiğimiz çıktıda header bilgiside olacağı için, standart php kodları ile pharse edebiliriz. tüm cookie leri cookies isminde bir dizi değişkene atadık. Aldığımız bu cookieleri yukarda belirttiğimiz gibi, yeni bir curl isteğinde kullanabiliriz.


Curl ile bir header bilgisi okuyabildiğimiz gibi header bilgisi gönderedebiliriz. bu işlem için CURLOPT_HTTPHEADER seçeneğini kullanabiliriz. CURLOPT_HEADER ile karıştırılmaması gereken bir konudur. CURLOPT_HTTPHEADER değer olarak array kabul eder.

 

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.kerimyilmaz.com.tr");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_HEADER, true);

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'HEADERBILGISI: BirDeger',
));

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "veri=degeri");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_COOKIE, "cookie_ismi=cookie_degeri;");

$sonuc = curl_exec($curl);
curl_close($curl);


preg_match_all('/^Set-Cookie:s*([^;]*)/mi', $sonuc, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
var_dump($cookies);
?>

Gsterdiğimzi örnekte CURLOPT_HTTPHEADER ile HEADERBILGISI başlığında bir header datası gönderdik, peki karşı tarafta bunu nasıl alırız diye soracak olursanız

$_SERVER["HTTP_HEADERBILGISI"];

şeklinde gelen header bilgisini okuyabilir ve işlemlerinizde kullanabilirsiniz. curl ile ilgili temel konulara değindiğimize göre, soru ve görüşlerinizi yorum olarak yada iletişim bölümünden bana iletebilirsiniz.