首页 > 开发 > PHP > 正文

php使用curl代理实现抓取数据的方法

2024-05-04 22:01:02
字体:大 中 小
来源:转载
供稿:网友
  1. <?php 
  2. define ('IS_PROXY', true );//是否启用代理 
  3. functionasync_get_url($url_array,$wait_usec= 0) 
  4. { 
  5.   if(!is_array($url_array)) 
  6.     returnfalse; 
  7.   $wait_usec=intval($wait_usec); 
  8.   $data =array(); 
  9.   $handle=array(); 
  10.   $running= 0; 
  11.   $mh= curl_multi_init();// 开启多线程 
  12.   $i= 0; 
  13.   foreach($url_arrayas$url) { 
  14.     $ch= curl_init(); 
  15.     if(IS_PROXY) { 
  16.     //以下代码设置代理服务器 
  17.     //代理服务器地址http://www.cnproxy.com/proxy1.html !!Hong Kong, China的速度比较好 
  18.     curl_setopt ($ch, CURLOPT_PROXY,'110.4.12.170:80'); 
  19.     } 
  20.     curl_setopt($ch, CURLOPT_URL,$url); 
  21.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// return don't print 
  22.     curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置超时时间 
  23.     curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
  24.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// 302 redirect 
  25.     curl_setopt($ch, CURLOPT_MAXREDIRS, 7);//HTTp定向级别 
  26.     curl_multi_add_handle($mh,$ch);// 把 curl resource 放进 multi curl handler 里 
  27.     $handle[$i++] =$ch; 
  28.   } 
  29.   /* 执行 */ 
  30.   do{ 
  31.     $mrc= curl_multi_exec($mh,$running); 
  32.     if($wait_usec> 0)/* 每个 connect 要间隔多久 */ 
  33.       usleep($wait_usec);// 250000 = 0.25 sec 
  34.   }while($mrc== CURLM_CALL_MULTI_PERFORM); 
  35.   while($running&&$mrc== CURLM_OK) { 
  36.     if(curl_multi_select($mh) != -1) { 
  37.       do{ 
  38.         $mrc= curl_multi_exec($mh,$running); 
  39.       }while($mrc== CURLM_CALL_MULTI_PERFORM); 
  40.     } 
  41.   } 
  42.   /* 读取资料 */ 
  43.   foreach($handleas$i=>$ch) { 
  44.     $content= curl_multi_getcontent($ch); 
  45.     $data[$i] = (curl_errno($ch) == 0) ?$content: false; 
  46.   } 
  47.   /* 移除 handle*/ 
  48.   foreach($handleas$ch) { 
  49.     curl_multi_remove_handle($mh,$ch); 
  50.   } 
  51.   curl_multi_close($mh); 
  52.   return$data; 
  53. } 
  54. $urls=array('http://map.baidu.com'); 
  55. $re= async_get_url($urls); 
  56. echo$re[0]; 
  57. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表