我怎么知道我的卷曲代理是否已关闭?

时间:2011-08-06 16:45:21

标签: php curl proxy

在PHP中,我使用带有curl的代理,具有以下内容:

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

我有一个带备份代理ip的数据库,但是我想知道如何检测代理是否已经关闭以便它可以切换变量$current_proxy

您建议检测服务器是否已关闭?感谢。

3 个答案:

答案 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