从网页提取代理服务器并验证是否可用
程序员文章站
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); }