在PHP中,我使用带有curl的代理,具有以下内容:
CURLOPT_HTTPPROXYTUNNEL, 1,
CURLOPT_PROXY, ''.$current_proxy.'',
我有一个带备份代理ip的数据库,但是我想知道如何检测代理是否已经关闭以便它可以切换变量$current_proxy
。
您建议检测服务器是否已关闭?感谢。
答案 0 :(得分:4)
您可以尝试使用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;
}
答案 1 :(得分: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!";
}
}
答案 2 :(得分:0)
Curl无法区分代理是否已关闭或页面是否不存在(或此页面所在的服务器已关闭)。这就是为什么你需要自己发明解决方法。至少来自Haxx AB的Daniel said it。