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程序设计有所帮助。