程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php curl 抓取頁面幾種方法介紹

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

編輯:關於PHP編程

curl主要是抓取數據,當然我們可以用其他的方法來抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接訪問的頁面,如果要抓取有頁面訪問控制的頁面,或者是登錄以後的頁面就比較困難了。

是把PHP的主頁取回放到一個文件中。

例 1. 使用PHP的CURL模塊取回PHP主頁

 代碼如下 復制代碼 <?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把這行注釋掉的話,就會直接輸出
 $result=curl_exec($ch);
 curl_close($ch);


2,使用代理進行抓取

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

 

 代碼如下 復制代碼 <?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://www.hzhuti.com");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
 curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);
 //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密碼的話,加上這個
 $result=curl_exec($ch);
 curl_close($ch);
 ?>

3,post數據後,抓取數據

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

 代碼如下 復制代碼

<?php
 $ch = curl_init();
 /*在這裡需要注意的是,要提交的數據不能是二維數組或者更高
 *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')
 *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')這樣會報錯的*/
 $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010');
 curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php');
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_exec($ch);
 ?>在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php輸出的內容Array ( [name] => test [sex] => 1 [birth] => 20101010 )

4,抓取一些有頁面訪問控制的頁面

\

頁面訪問控制的3種方法

頁面訪問控制的3種方法張映 發表於 2010-10-12

分類目錄: apache/nginx
我們經常會看到這種現象,看下圖


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

一,用htpasswd命令,產生權限控制文件

 代碼如下 復制代碼

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

二,頁面訪問控制方法

1,能過修改httpd.conf或者是httpd-vhosts.conf來進行配置

 

 代碼如下 復制代碼

listen 10004
NameVirtualHost *:10004
<VirtualHost *:10004>
 DocumentRoot "/home/zhangy/www/test"
 ServerName *:10004
 BandwidthModule On
 ForceBandWidthModule On
 Bandwidth all 1024000
 MinBandwidth all 50000
 LargeFileLimit * 500 50000
 MaxConnection all 2

 ErrorLog "/home/zhangy/apache/blog.51yip.com.com-error.log"
 CustomLog "/home/zhangy/apache/blog.51yip.com-access.log" common
//看一下,下面的配置
 <Directory /home/zhangy/www/test>
 AuthType Basic
 AuthName "access test"
 AuthUserFile /home/zhangy/www/test/access
 Require valid-user
 </Directory>

</VirtualHost>

2,我們可以利用.htaccess文件來進行控制

在test的根目錄下面建一個.htaccess的文件

 代碼如下 復制代碼

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

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

 代碼如下 復制代碼

define('ADMIN_USERNAME','tank'); &nbsp;&nbsp; &nbsp;// Admin Username
define('ADMIN_PASSWORD','tank'); &nbsp;&nbsp;&nbsp; &nbsp;// Admin Password

//log check
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
 $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||$_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
 Header("WWW-Authenticate: Basic realm="access test"");
 Header("HTTP/1.0 401 Unauthorized");

 echo &lt;&lt;&lt;EOB
 &lt;html&gt;&lt;body&gt;
 &lt;h1&gt;Rejected!&lt;/h1&gt;
 &lt;big&gt;Wrong Username or Password!&lt;/big&gt;
 &lt;/body&gt;&lt;/html&gt;
EOB;
 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會話,且取回一個網頁

 代碼如下 復制代碼

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, “http://www.zend.com/”);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved