在PHP中我使用的是代理,卷曲下列要求:我如何知道我的卷发代理是否已关闭?
CURLOPT_HTTPPROXYTUNNEL, 1,
CURLOPT_PROXY, ''.$current_proxy.'',
和我有备份代理知识产权的中有一个数据库,但我想知道我可以检测是否代理已经下来,它可以切换变量$current_proxy
。
对于检测服务器是否关闭,您有何建议?谢谢。
在PHP中我使用的是代理,卷曲下列要求:我如何知道我的卷发代理是否已关闭?
CURLOPT_HTTPPROXYTUNNEL, 1,
CURLOPT_PROXY, ''.$current_proxy.'',
和我有备份代理知识产权的中有一个数据库,但我想知道我可以检测是否代理已经下来,它可以切换变量$current_proxy
。
对于检测服务器是否关闭,您有何建议?谢谢。
Curl不区分代理是否关闭或页面不存在(或者该页面所在的服务器关闭)。这就是为什么你需要自己发明解决方法。至少丹尼尔从Haxx AB said it。
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!";
}
}
你可以只是尝试以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;
}
我在执行脚本时遇到了麻烦。在“@fsockopen” - 整个主机无法访问。 – LINKeRxUA
难道你不能简单地检查如果'curl_exec()'返回'FALSE',并且它尝试使用不同的代理? – EdoDodo
只是谷歌它:http://madppc.com/php-proxy-checker-using-curl_multi/ – hakre
@EdoDodo:当你尝试所有代理(包括工作的)在一个不存在的页面上,你可能会来该方法无效的结论。 – hakre