2011-08-06 43 views
2

在PHP中我使用的是代理,卷曲下列要求:我如何知道我的卷发代理是否已关闭?

CURLOPT_HTTPPROXYTUNNEL, 1, 
CURLOPT_PROXY, ''.$current_proxy.'', 

和我有备份代理知识产权的中有一个数据库,但我想知道我可以检测是否代理已经下来,它可以切换变量$current_proxy

对于检测服务器是否关闭,您有何建议?谢谢。

+1

难道你不能简单地检查如果'curl_exec()'返回'FALSE',并且它尝试使用不同的代理? – EdoDodo

+0

只是谷歌它:http://madppc.com/php-proxy-checker-using-curl_multi/ – hakre

+0

@EdoDodo:当你尝试所有代理(包括工作的)在一个不存在的页面上,你可能会来该方法无效的结论。 – hakre

回答

0

Curl不区分代理是否关闭或页面不存在(或者该页面所在的服务器关闭)。这就是为什么你需要自己发明解决方法。至少丹尼尔从Haxx AB said it

1

LIST.TXT包含如:

1.2.3.4:2487 123.123.123.123:3248

等PHP代码是这样的...

$url = "http://www.google.com"; 
$proxies = file("list.txt"); 

foreach($proxies as $proxy) 
{ 
    $ch = curl_init($url); 
    curl_setopt($ch,CURLOPT_PROXY,$proxy); 
    curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,$proxy); 
    $page = curl_exec($ch); 
    curl_close($ch); 
    $check = stripos($page,'</html>'); // not pretty :) 

     if($check > 0) 
     { 
      echo $proxy . " Works!"; 
     }else{ 
      echo $proxy . " Is Dead!"; 
     } 
} 
3

你可以只是尝试以fsockopen这样的方式连接到代理:

$proxy = '98.255.255.255:8080'; 
$timeout = 5; 
$splited = explode(':',$proxy); // Separate IP and port 
if($con = @fsockopen($splited[0], $splited[1], $errorNumber, $errorMessage, $timeout)) 
{ 
    echo 'Connection successful, PROXY works!'; 
} else { 
    echo $errorNumber . ' ' . $errorMessage; 
} 
+0

我在执行脚本时遇到了麻烦。在“@fsockopen” - 整个主机无法访问。 – LINKeRxUA

相关问题