php使用curl代理实现抓取数据的方法
本文实例讲述了php使用curl代理实现抓取数据的方法。分享给大家供大家参考,具体如下:
<?php define('IS_PROXY',true);//是否启用代理 functionasync_get_url($url_array,$wait_usec=0) { if(!is_array($url_array)) returnfalse; $wait_usec=intval($wait_usec); $data=array(); $handle=array(); $running=0; $mh=curl_multi_init();//开启多线程 $i=0; foreach($url_arrayas$url){ $ch=curl_init(); if(IS_PROXY){ //以下代码设置代理服务器 //代理服务器地址http://www.cnproxy.com/proxy1.html!!HongKong,China的速度比较好 curl_setopt($ch,CURLOPT_PROXY,'110.4.12.170:80'); } curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//returndon'tprint curl_setopt($ch,CURLOPT_TIMEOUT,30);//设置超时时间 curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/4.0(compatible;MSIE5.01;WindowsNT5.0)'); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//302redirect curl_setopt($ch,CURLOPT_MAXREDIRS,7);//HTTp定向级别 curl_multi_add_handle($mh,$ch);//把curlresource放进multicurlhandler里 $handle[$i++]=$ch; } /*执行*/ do{ $mrc=curl_multi_exec($mh,$running); if($wait_usec>0)/*每个connect要间隔多久*/ usleep($wait_usec);//250000=0.25sec }while($mrc==CURLM_CALL_MULTI_PERFORM); while($running&&$mrc==CURLM_OK){ if(curl_multi_select($mh)!=-1){ do{ $mrc=curl_multi_exec($mh,$running); }while($mrc==CURLM_CALL_MULTI_PERFORM); } } /*读取资料*/ foreach($handleas$i=>$ch){ $content=curl_multi_getcontent($ch); $data[$i]=(curl_errno($ch)==0)?$content:false; } /*移除handle*/ foreach($handleas$ch){ curl_multi_remove_handle($mh,$ch); } curl_multi_close($mh); return$data; } $urls=array('http://map.baidu.com'); $re=async_get_url($urls); echo$re[0]; ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《phpcurl用法总结》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。