萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php使用curl代理實現抓取數據的方法

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 !!Hong Kong, China的速度比較好

    curl_setopt ($ch, CURLOPT_PROXY,'110.4.12.170:80');

    }

    curl_setopt($ch, CURLOPT_URL,$url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// return don't print

    curl_setopt($ch, CURLOPT_TIMEOUT, 30);//設置超時時間

    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// 302 redirect

    curl_setopt($ch, CURLOPT_MAXREDIRS, 7);//HTTp定向級別

    curl_multi_add_handle($mh,$ch);// 把 curl resource 放進 multi curl handler 裡

    $handle[$i++] =$ch;

  }

  /* 執行 */

  do{

    $mrc= curl_multi_exec($mh,$running);

    if($wait_usec> 0)/* 每個 connect 要間隔多久 */

      usleep($wait_usec);// 250000 = 0.25 sec

  }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];

?>

copyright © 萬盛學電腦網 all rights reserved