2013-04-30 2 views
2

프록시 목록이 있는데 어떤 프록시가 활성 상태인지 확인하려고합니다. 내가 지금까지 해왔 던 일은 곱슬 곱슬을 통해 그들 중 하나의 모든 것에 연결하고 그들이 응답했는지 확인하는 것이 었습니다. 그러나 나는 더 빠르고 비슷한 것을 찾고 있습니다. http://www.ip-adress.com/Proxy_Checker/. 나는 항구가 열려 있는지 또는 그런 것이 있는지 확인하려고 생각하고있다. 내가 현재 사용하고있는 코드는프록시가 활성화되어 있는지 확인하려면 어떻게해야합니까?

<?php 




error_reporting(E_ERROR); 
//ini_set('memory_limit', '256M'); 
function hitFormGet($loginURL, $loginFields, $referer, $cookieString, $code) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 

    // curl_setopt($ch, CURLOPT_AUTOREFERER,   true); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    // curl_setopt($ch, CURLOPT_COOKIE,$cookieString); 
    curl_setopt($ch, CURLOPT_FAILONERROR, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate,sdch'); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    // curl_setopt($ch, CURLOPT_POST,     true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 35); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11"); 

    curl_setopt($ch, CURLOPT_URL, $loginURL . $loginFields); 

    curl_setopt($ch, CURLOPT_REFERER, $referer); 

    // curl_setopt($ch, CURLOPT_POSTFIELDS, $loginFields); 
    $ret = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    $code = $info['http_code']; 
    curl_close($ch); 
    return $ret; 
} 
function hitFormGetProxyINI($loginURL, $loginFields, $referer, $cookieString, &$code, $proxy, $js) 
{ 
    echo $proxy . ">$loginURL\n"; 
    $ch  = curl_init(); 
    $initials = file_get_contents("bot.ini"); 
    $initials = explode(";", $initials); 
    $encod = "gzip,deflate,sdch"; 
    $agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11"; 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 

    curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    curl_setopt($ch, CURLOPT_COOKIE, $cookieString); 
    curl_setopt($ch, CURLOPT_FAILONERROR, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_PROXY, $proxy); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_ENCODING, $encod); 

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    if (!$js) 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Accept-Language: en-US,en;q=0.8', 
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
      'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3' 
     )); 
    else 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Accept-Language: en-US,en;q=0.8', 
      'Accept: */*', 
      'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3' 
     )); 

    // curl_setopt($ch, CURLOPT_POST,     true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 

    curl_setopt($ch, CURLOPT_URL, $loginURL . $loginFields); 

    if (strlen($referer) > 4) 
     curl_setopt($ch, CURLOPT_REFERER, $referer); 

    // curl_setopt($ch, CURLOPT_POSTFIELDS, $loginFields); 
    $ret = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    $code = $info; 
    curl_close($ch); 
    return $ret; 
} 
function hitFormPost($loginURL, $loginFields, $referer, $cookieString) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 

    // curl_setopt($ch, CURLOPT_AUTOREFERER,   true); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    // curl_setopt($ch, CURLOPT_COOKIE,$cookieString); 
    curl_setopt($ch, CURLOPT_FAILONERROR, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate,sdch'); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11"); 

    curl_setopt($ch, CURLOPT_URL, $loginURL); 

    curl_setopt($ch, CURLOPT_REFERER, $referer); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $loginFields); 
    $ret = curl_exec($ch); 
    curl_close($ch); 
    return $ret; 
} 
for ($in = 0; $in < 100; $in++) { 
    file_put_contents("mysql_dumpB$in.txt", ''); 

} 
sleep(180); 
$link = mysql_connect("localhost:3306", "userkdo_botuser1", "dvd6000") or die(mysql_error()); 
mysql_select_db("userkdo_botdb1", $link) or die(mysql_error()); 


$tier1_countries = array(
    "United States", 
    "Canada", 
    "Japan", 
    "United Kingdom", 
    "Germany", 
    "France", 
    "Belgium", 
    "Netherlands", 
    "Sweden", 
    "Norway", 
    "Denmark", 
    "Ireland", 
    "Switzerland", 
    "Spain", 
    "Luxembourg", 
    "Liechtenstein", 
    "Monaco", 
    "Italy", 
    "Finland", 
    "Austria", 
    "Australia" 
); 
$tier2_countries = array(
    "Cyprus", 
    "Greece", 
    "Hong Kong", 
    "Israel", 
    "Republic of Korea", 
    "New Zealand", 
    "Poland", 
    "Portugal" 
); 



$result = mysql_query("SELECT * 
FROM `proxies` WHERE `type`='anon' 
ORDER BY `proxies`.`last_checked` ASC 
LIMIT 0 , 100"); 
$nexturl = "http://DOMAIN.net/bot/headers.php"; 
$pids = array(); 
$i  = 0; 
while ($row = mysql_fetch_assoc($result)) { 





    $pids[$i] = pcntl_fork(); 

    if (!$pids[$i]) { 
     // child process 
     $proxy = $row['proxy']; 
     $res = hitFormGetProxyINI($nexturl, "", "", "", $cd, $proxy, false); 
     //print_r($cd); 
     echo $res . "\n"; 

     //$res=trim(strstr($res,"<",true)); 


     //file_put_contents("mysql_dumpB$i.txt","UPDATE `proxies` SET `last_checked` = '".time()."',`response_time`='".$cd['total_time']."' WHERE `proxies`.`proxy` = '".$proxy."'|"); 

     //echo "UPDATE `proxies` SET `last_checked` = '".time()."',`response_time`='".$cd['total_time']."' WHERE `proxies`.`proxy` = '".$proxy."'"."\n"; 

     if (strlen($res) > 1 && $res == "FALSE") { //$res1=hitFormGet("http://api.easyjquery.com/ips/?ip=".urlencode(strstr($proxy,":",true))."&full=true","","","",""); 
      $LocationData = json_decode($res1); 

      //$country= $LocationData->CountryName; 
      //if(in_array($country,$tier1_countries)) $ctier=1; else if(in_array($country,$tier2_countries)) $ctier=2; else $ctier=3; 
      file_put_contents("mysql_dumpB$i.txt", "UPDATE `proxies` SET `status` = 'active',`last_checked` = '" . time() . "',`last_active` = '" . time() . "',`response_time`='" . $cd['total_time'] . "' WHERE `proxies`.`proxy` = '" . $proxy . "'|", FILE_APPEND); 
      echo "UPDATE `proxies` SET `status` = 'active',`last_active` = '" . time() . "',`response_time`='" . $cd['total_time'] . "' WHERE `proxies`.`proxy` = '" . $proxy . "'" . "\n"; 
      echo "\n>>$country<<\n"; 
     } else { 
      $res1   = hitFormGet("http://api.easyjquery.com/ips/?ip=" . urlencode(strstr($proxy, ":", true)) . "&full=true", "", "", "", ""); 
      $LocationData = json_decode($res1); 

      //$country= $LocationData->CountryName; 
      //if(in_array($country,$tier1_countries)) $ctier=1; else if(in_array($country,$tier2_countries)) $ctier=2; else $ctier=3; 
      file_put_contents("mysql_dumpB$i.txt", "UPDATE `proxies` SET `status` = 'inactive',`last_checked` = '" . time() . "',`response_time`='" . $cd['total_time'] . "' WHERE `proxies`.`proxy` = '" . $proxy . "'|", FILE_APPEND); 
      echo "UPDATE `proxies` SET `status` = 'inactive',`response_time`='" . $cd['total_time'] . "' WHERE `proxies`.`proxy` = '" . $proxy . "'" . "\n"; 
      echo "\n>>$country<<\n"; 
     } 
     if (strlen($res) > 1 && $res != "FALSE") { 

      file_put_contents("mysql_dumpB$i.txt", "UPDATE `proxies` SET `status` = '404',`last_checked` = '" . time() . "',`response_time`='" . $cd['total_time'] . "' WHERE `proxies`.`proxy` = '" . $proxy . "'|", FILE_APPEND); 



     } 

     exit(); 
    } 
    $i++; 
} 


foreach ($pids as $pid) { 
    pcntl_waitpid($pid, $status, WUNTRACED); 
} 




?> 

스크립트는 데이터베이스에서 100 프록시를 검색하고 다음 목적지로 전송하고 응답을 확인하여 각 검사에 따라, 나는 단지 그들이 현재 매우 활성화되어 있는지 확인해야 여분의 것들이 제거됩니다. 검사 결과는 파일로 쿼리로 작성된 다음 두 번째 스크립트가 실행되어 데이터베이스가 변경됩니다.

+0

당신이, curl_exec의 반환 값을 확인하는 방법을 참조하십시오. 이 페이지에서 http://www.php.net/manual/en/function.curl-error.php 많은 오류 코드를, 그들 중 일부는 프록시 오류를 의미합니다. – kirugan

답변

6

어쩌면 하나씩 핑할 수 있습니까? 이

$host = '192.168.0.1'; 
$port = 80; 
$waitTimeoutInSeconds = 1; 
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){ 
    // It worked 
} else { 
    // It didn't work 
} 
fclose($fp); 

같은

뭔가가 잘못된 다음 curl_error ($의 curl_handler)에 의해 오류 번호를 가져 오지해야하는 경우 here

+0

나는 그것을 실제로 시도하고있다. 나는 그것이 어떻게 나오는지 알려 줄 것이다. – Evan

+1

그리고 어떻게 되었습니까? – jayarjo

+0

@jayarjo 그것은 일했습니다 :) – Evan

관련 문제