1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
<?php
class ProxyChecker
{
public $proxy = array();
public $website;
public $proxy_information = array();
// les proxies doivent etre aux format ip:port:user:pass, avec un espace entre chaque proxy
public function setProxy($text)
{
$text = str_replace(' ','',$text);
$proxy = explode(PHP_EOL,$text);
$i = 0;
foreach($proxy as $key)
{
$this->proxy[$i] = $key;
$i++;
}
}
public function setWebsite($url)
{
$this->website = $url;
}
public function display()
{
print_r($this->proxy);
}
public function explodeProxy($text)
{
$proxy = explode(':',$text);
$array = array('ip' => $proxy[0], 'port' => $proxy[1], 'user' => $proxy[2] , 'pass' => $proxy[3]);
return $array;
}
// cette fonction est utilisé pour traiter ce que retourne curl après avoir fait la requete
public function error_task($i, $array)
{
if($array['http_code'] == 200)
{
$this->proxy_information[$i] = array("error" => 0, "time" => round($array['total_time']*1000,0), "speed" => $array['speed_download']);
}
elseif($array['http_code'] == 0)
{
$this->proxy_information[$i] = array("error" => 1, "time" => 0, "speed" => 0);
}
elseif($array['http_code'] == 403)
{
$this->proxy_information[$i] = array("error" => 2, "time" => round($array['total_time']*1000,0), "speed" => $array['speed_download']);
}
}
// la fonction de test des proxies
public function testProxy()
{
$i = 0;
foreach($this->proxy as $key)
{
$proxy = $this->explodeProxy($key);
$url = $this->website;
$timeout = 10;
$proxy_host = $proxy['ip'].':'.$proxy['port']; // host:port
$proxy_ident = $proxy['user'].':'.$proxy['pass']; // username:password
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13';
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
if (preg_match('`^https://`i', $url))
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt ($ch,CURLOPT_VERBOSE,TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Activation de l'utilisation d'un serveur proxy
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
// Définition de l'adresse du proxy
curl_setopt($ch, CURLOPT_PROXY, $proxy_host);
// Définition des identifiants si le proxy requiert une identification
if ($proxy_ident)
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_ident);
$page_content = curl_exec($ch);
print_r(curl_error($ch)) ;
// traitement des info retourné par curl
$this->error_task($i,curl_getinfo($ch));
curl_close($ch);
$i++;
}
}
}
?> |
Partager