国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php curl 抓取頁面幾種方法介紹

2024-05-04 21:48:38
字體:
來源:轉載
供稿:網友

curl主要是抓取數據,當然我們可以用其他的方法來抓取,比如fsockopen,file_get_contents等,但是只能抓那些能直接訪問的頁面,如果要抓取有頁面訪問控制的頁面,或者是登錄以后的頁面就比較困難了,是把PHP的主頁取回放到一個文件中.

例 1,使用PHP的CURL模塊取回PHP主頁,代碼如下:

  1. $ch = curl_init(); 
  2. curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php"); 
  3. curl_setopt($ch, CURLOPT_HEADER, false); 
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把這行注釋掉的話,就會直接輸出 
  5. $result=curl_exec($ch); 
  6. curl_close($ch);  

2,使用代理進行抓取

為什么要使用代理進行抓取呢?以google為例吧,如果去抓google的數據,短時間內抓的很頻繁的話,你就抓取不到了,google對你的ip地址做限制這個時候,你可以換代理重新抓,代碼如下:

  1. <?php 
  2.  $ch = curl_init(); 
  3.  curl_setopt($ch, CURLOPT_URL, "http://m.survivalescaperooms.com"); 
  4.  curl_setopt($ch, CURLOPT_HEADER, false); 
  5.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  6.  curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); 
  7.  curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080); 
  8.  //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密碼的話,加上這個 
  9.  $result=curl_exec($ch); 
  10.  curl_close($ch); 
  11.  ?> 

3,post數據后,抓取數據

單獨說一下數據提交數據,因為用 curl的時候,很多時候會有數據交互的,所以比較重要的,代碼如下:

  1. <?php 
  2.  $ch = curl_init(); 
  3.  /*在這里需要注意的是,要提交的數據不能是二維數組或者更高 
  4.  *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')//開源代碼Vevb.com 
  5.  *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')這樣會報錯的*/ 
  6.  $data = array('name' => 'test''sex'=>1,'birth'=>'20101010'); 
  7.  curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php'); 
  8.  curl_setopt($ch, CURLOPT_POST, 1); 
  9.  curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
  10.  curl_exec($ch); 
  11.  ?> 

在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php輸出的內容Array ( [name] => test [sex] => 1 [birth] => 20101010 )

4,抓取一些有頁面訪問控制的頁面,頁面訪問控制的3種方法.

分類目錄: apache/nginx

apache 頁面訪問控制:為什么要進行這樣的控制呢,給不同的人看不同的東西,對信息進行保護,雖然這種保護比較低級,多多少少還是有點用的.

一,用htpasswd命令,產生權限控制文件,代碼如下:

  1. 1.[zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一個密碼文件 ,-c是新建一個文件  htpasswd -h可查看    
  2. 2.New password:            //提示輸入密碼    
  3. 3.Re-type new password:        //重復密碼    
  4. 4.Adding password for user tank    
  5. 5.[zhangy@BlackGhost test]$ cat access    //查看一下密碼文件    
  6. 6.tank:Uj5B3qIF/BNdI      //用戶名是明文的,密碼是加密的。   
  7. [zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一個密碼文件 ,-c是新建一個文件  htpasswd -h可查看 
  8. New password:            //提示輸入密碼 
  9. Re-type new password:        //重復密碼 
  10. Adding password for user tank 
  11. [zhangy@BlackGhost test]$ cat access    //查看一下密碼文件 
  12. tank:Uj5B3qIF/BNdI      //用戶名是明文的,密碼是加密的。到這兒密碼文件是生成好了。 

二,頁面訪問控制方法

1,能過修改httpd.conf或者是httpd-vhosts.conf來進行配置,代碼如下:

  1. listen 10004 
  2. NameVirtualHost *:10004 
  3. <VirtualHost *:10004> 
  4.  DocumentRoot "/home/zhangy/www/test" 
  5.  ServerName *:10004 
  6.  BandwidthModule On 
  7.  ForceBandWidthModule On 
  8.  Bandwidth all 1024000 
  9.  MinBandwidth all 50000 
  10.  LargeFileLimit * 500 50000 
  11.  MaxConnection all 2 
  12.  
  13.  ErrorLog "/home/zhangy/apache/blog.51yip.com.com-error.log" 
  14.  CustomLog "/home/zhangy/apache/blog.51yip.com-access.log" common 
  15. //看一下,下面的配置 
  16.  <Directory /home/zhangy/www/test> 
  17.  AuthType Basic 
  18.  AuthName "access test" 
  19.  AuthUserFile /home/zhangy/www/test/access 
  20.  Require valid-user 
  21.  </Directory> 
  22.  
  23. </VirtualHost> 

2,我們可以利用.htaccess文件來進行控制,在test的根目錄下面建一個.htaccess的文件,代碼如下:

  1. [zhangy@BlackGhost test]$ vi .htaccess&nbsp;&nbsp; //打開個文件 ,添加權限內容 
  2. [zhangy@BlackGhost test]$ cat .htaccess&nbsp; //下面就是.htaccess的內容 
  3.  AuthType Basic 
  4.  AuthName "access test" 
  5.  AuthUserFile /home/zhangy/www/test/access 
  6.  Require valid-user 

3,不用密碼文件,也可以進行訪問控制,代碼如下:

  1. define('ADMIN_USERNAME','tank'); &nbsp;&nbsp; &nbsp;// Admin Username 
  2. define('ADMIN_PASSWORD','tank'); &nbsp;&nbsp;&nbsp; &nbsp;// Admin Password 
  3.  
  4. //log check 
  5. if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || 
  6.  $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||$_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) { 
  7.  Header("WWW-Authenticate: Basic realm="access test""); 
  8.  Header("HTTP/1.0 401 Unauthorized"); 
  9.  
  10.  echo &lt;&lt;&lt;EOB 
  11.  &lt;html&gt;&lt;body&gt; 
  12.  &lt;h1&gt;Rejected!&lt;/h1&gt; 
  13.  &lt;big&gt;Wrong Username or Password!&lt;/big&gt; 
  14.  &lt;/body&gt;&lt;/html&gt; 
  15. EOB; 
  16.  exit

curl相關函數列表:

curl_init — 初始化一個CURL會話

curl_setopt — 為CURL調用設置一個選項

curl_exec — 執行一個CURL會話

curl_close — 關閉一個CURL會話

curl_version — 返回當前CURL版本

curl_init — 初始化一個CURL會話

描述:int curl_init ([string url])

curl_init()函數將初始化一個新的會話,返回一個CURL句柄供 curl_setopt(), curl_exec(),和 curl_close() 函數使用,如果可選參數被提供,那么CURLOPT_URL選項將被設置成這個參數的值,你可以使用curl_setopt()函數人工設置.

例 1.初始化一個新的CURL會話,且取回一個網頁,代碼如下:

  1. $ch = curl_init(); 
  2. curl_setopt ($ch, CURLOPT_URL, “http://m.survivalescaperooms.com/”); 
  3. curl_setopt ($ch, CURLOPT_HEADER, 0); 
  4. curl_exec ($ch); 
  5. curl_close ($ch);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绍兴县| 永年县| 镶黄旗| 民县| 镇康县| 密山市| 自治县| 古田县| 上林县| 高陵县| 定兴县| 沁源县| 上思县| 桓台县| 扎鲁特旗| 积石山| 民和| 洪泽县| 定襄县| 中卫市| 濮阳县| 台北市| 望谟县| 马龙县| 黄石市| 重庆市| 扶绥县| 阿合奇县| 金乡县| 新乡县| 濮阳市| 土默特左旗| 福安市| 龙岩市| 新疆| 青田县| 乌兰县| 榆树市| 西华县| 宿迁市| 马公市|