欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

从网页提取代理服务器并验证是否可用

程序员文章站 2023-12-27 23:11:27
...

提取http://cn-proxy.com/提供的代理服务器,然后尝试连接一下检查是否可用。 需要使用sockets模块。 刷东西什么的,最好用了。 无 ?phpinclude 'simple_html_dom.php';//ini_set('default_socket_timeout', 2);$url = 'http://cn-proxy.com/';$html = file_g

提取http://cn-proxy.com/提供的代理服务器,然后尝试连接一下检查是否可用。
需要使用sockets模块。
刷东西什么的,最好用了。
find('table.sortable tr');

//echo 'count(ip):', count($ret), PHP_EOL;

$ips = array();

foreach($ret as $key => $value)
{
    $tds = $value->find('td');
    if(count($tds) innertext;
    $port = $tds[1]->innertext;
    
    if(filter_var($ip, FILTER_VALIDATE_IP))
    {
        $ips[] = array('ip' => $ip, 'port' => $port);
    }
}

//var_dump($ips);

echo '找到代理', count($ips), '个.', PHP_EOL;

$validate = array();

foreach($ips as $value)
{
    if(checkProxy($value['ip'], $value['port']))
    {
        $validate[] = $value;
    }
}

echo '可用代理', count($validate), '个', PHP_EOL;

foreach($validate as $value)
{
    visit($value['ip'], $value['port'], 'http://www.actself.me/');
}

echo 'done.', date('Y-m-d H:i:s') , PHP_EOL;

function checkProxy($ip, $port)
{
    echo '验证 ', $ip, ":", $port, ' ', date('Y-m-d H:i:s');
    $fd = @stream_socket_client('tcp://' . $ip . ':' . $port, $errno, $errstr, 2);
    
    echo $fd !== false ? ' 可用' : ' 不可用';
    echo date('Y-m-d H:i:s'), PHP_EOL;

    if($fd !== false)
    {
        fclose($fd);
        return true;
    }
    /*
    $fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if($fd === false)
    {   
        echo 'socket_create failed.', PHP_EOL;
        return false;
    }
    $ret = socket_connect($fd, $ip, $port);
    socket_close($fd);
    */
    return false;
}

function visit($ip, $port, $url)
{
    $h = curl_init($url);
    //curl_setopt($h, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($h, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    //curl_setopt($h, CURLOPT_PROXY, '127.0.0.1:1080');
    curl_setopt($h, CURLOPT_PROXY, $ip . ':' . $port);
    curl_setopt($h, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($h, CURLOPT_TIMEOUT, 6);
    curl_setopt($h, CURLOPT_RETURNTRANSFER, true);

    $ret = curl_exec($h);

    echo $ret === false ? 'curl exec failed.' : 'curl exec successed.';
    echo PHP_EOL;
    if($ret === false)
    {
        echo curl_error($h), PHP_EOL;
    }

    curl_close($h);
}

上一篇:

下一篇: