Php Curl Proxy Destekli Bot

Php Curl ile IPv4, IPv6, Https uyumlu ve proxy destekli bir bot yazalım. Özellikle başka sitelerle bağlantı kurduğumuz projelerde IP adresimizin görünmesini istemeyiz. Bu gizlilik gerekliliği bizi proxy kullanımına yönlendirir. Php ile dış mecralardan veri elde etmenin en işlevsel yolu olan Curl’da proxy kullanmını anlatan çok sayıda içerik olmasına rağmen bunların çoğu işlevsel uyumluluk açısından eksik yönlere sahip. Bu projede hemen hemen tüm işlevleriyle Curl proxy kullanımını ve proxyleri otomatik bulma yöntemini örnekleyeceğim.

<?php

$baglanti_zaman_asimi = 15;
$zaman_asimi = 15;
$curl_defaults = array(
    CURLOPT_HEADER => 0,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_AUTOREFERER => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_CONNECTTIMEOUT => $baglanti_zaman_asimi,
    CURLOPT_TIMEOUT => $zaman_asimi,
    CURLOPT_VERBOSE => 0,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0
    );
function Return_Content_From_URL($url,$proxy,$port,$proxy_kadisifre){
    global $curl_defaults;
    $ch = curl_init();
    curl_setopt_array($ch, $curl_defaults);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"); //Tarayıcı sürümü
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_PROXYPORT, $port);
    curl_setopt($ch, CURLOPT_PROXYTYPE, "HTTP"); // HTTP/HTTPS türü proxy kullanacağız.
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    if ($loginpassw!="0:0"){
        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_kadisifre);
        }
    $html= curl_exec($ch);
    $buhata = 0;
    $buhata = curl_errno($ch);
    curl_close($ch);
    if ($err!=0){
        $hata = Echo_Curl_Error($buhata);
        if($silent==0){echo "<b>Bir Hata Oluştu. Hata Kodu: $err: ".$hata."</b><br />";}
        return false;
        }
    return $html;
    }
$url = "https://www.whatismyip.com/";
$proxy = "146.20.68.224";
$port = "3128";
$proxy_kadisifre = "0:0"; // Kullanıcı adı ve şifreniz yoksa 0:0 olarak belirleyin.
$beybut= Return_Content_From_URL($url,$proxy,$port,$proxy_kadisifre);
echo '<h1>Beybut PHP Curl Proxy Geçit : '.$proxy.':'.$port.'</h1>';
echo $beybut;
?>

Kodları işlettiğimizde karşımıza şöyle bir ekran geliyor:

Php Curl Proxy

“Your IP Address Is: …” tabirindeki ip adresinin garipliği ilginizi çekmiştir. Bu, Ipv6 türü bir ip kullandığımızı gösteriyor.

Temel kodlamamız bu biçimde. Ancak biz işi bir adım daha ileriye götürüp; kullanacağımız proxy’yi güncel bir proxy sitesinden elde ederek her şeyi otomatikleştirelim. Incloak.com bu açıdan bize filtrelenebilir ve ücretsiz proxyler sunuyor. O halde kullanalım.

https://incloak.com/proxy-list/?maxtime=1500&ports=3128&type=s&anon=4” adresine girdiğinizde Https destekli, yüksek gizlilik (High anon.) içeren, 1500 ms’den hızlı ve 3128 portunu kullanan proxylerin yukarıdan aşağı listelendiğini görüyoruz.

incloak.com Proxy Listesi

Bu güzel kaynağı kullanmamak olmaz. En baştaki proxy’i alarak projemize dahil edecek basit explode kodlarını yazalım. Bunun için “getir” adlı normal bir Curl fonksiyonu da oluşturalım.

function getir($url){

    $ch = curl_init();

    $zaman = 25;

    curl_setopt ($ch, CURLOPT_URL, $url); 

    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);

	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
	
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $zaman);

    $rmx = curl_exec($ch);

    curl_close($ch);

    return $rmx;

    }
	
$beybut_proxy_al=getir('https://incloak.com/proxy-list/?maxtime=1500&ports=3128&type=s&anon=4');
$canim_proxyim=explode('</tr><tr><td class=tdl>',$beybut_proxy_al);
$canim_proxyim=explode('<',$canim_proxyim[1]);
$canim_proxyim=$canim_proxyim[0];
echo $canim_proxyim;

“$canim_proxyim” artık kullanıma hazır. Portumuz 3128’di. Toparlayalım.

<?php
function getir($url){

    $ch = curl_init();

    $zaman = 25;

    curl_setopt ($ch, CURLOPT_URL, $url); 

    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);

	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
	
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $zaman); //timeoutsüresi default olarak 5

    $rmx = curl_exec($ch);

    curl_close($ch);

    return $rmx;

    }
	
$beybut_proxy_al=getir('https://incloak.com/proxy-list/?maxtime=1500&ports=3128&type=s&anon=4');
$canim_proxyim=explode('</tr><tr><td class=tdl>',$beybut_proxy_al);
$canim_proxyim=explode('<',$canim_proxyim[1]);
$canim_proxyim=$canim_proxyim[0];


$baglanti_zaman_asimi = 15;
$zaman_asimi = 15;
$curl_defaults = array(
    CURLOPT_HEADER => 0,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_AUTOREFERER => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_CONNECTTIMEOUT => $baglanti_zaman_asimi,
    CURLOPT_TIMEOUT => $zaman_asimi,
    CURLOPT_VERBOSE => 0,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0
    );
function Return_Content_From_URL($url,$proxy,$port,$proxy_kadisifre){
    global $curl_defaults;
    $ch = curl_init();
    curl_setopt_array($ch, $curl_defaults);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"); //Tarayıcı sürümü
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_PROXYPORT, $port);
    curl_setopt($ch, CURLOPT_PROXYTYPE, "HTTP"); // HTTP/HTTPS türü proxy kullanacağız.
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    if ($loginpassw!="0:0"){
        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_kadisifre);
        }
    $html= curl_exec($ch);
    $buhata = 0;
    $buhata = curl_errno($ch);
    curl_close($ch);
    if ($err!=0){
        $hata = Echo_Curl_Error($buhata);
        if($silent==0){echo "<b>Bir Hata Oluştu. Hata Kodu: $err: ".$hata."</b><br />";}
        return false;
        }
    return $html;
    }
$url = "https://www.whatismyip.com/";
$proxy = $canim_proxyim;
$port = "3128";
$proxy_kadisifre = "0:0"; // Kullanıcı adı ve şifreniz yoksa 0:0 olarak belirleyin.
$beybut= Return_Content_From_URL($url,$proxy,$port,$proxy_kadisifre);
echo '<h1>Beybut PHP Curl Proxy Geçit : '.$proxy.':'.$port.'</h1>';
echo $beybut;
?>

Güncel bir proxy bulup belirlediğimiz sayfayı bu geçit üzerinden çeken, IPv4 ve 6, Https uyumlu nur topu gibi bir “bot”umuz oldu.