curl主要是抓取數據,當然我們可以用其他的方法來抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接訪問的頁面,如果要抓取有頁面訪問控制的頁面,或者是登錄以後的頁面就比較困難了。
是把PHP的主頁取回放到一個文件中。
例 1. 使用PHP的CURL模塊取回PHP主頁
代碼如下 復制代碼 <?php
2,使用代理進行抓取
為什麼要使用代理進行抓取呢?以google為例吧,如果去抓google的數據,短時間內抓的很頻繁的話,你就抓取不到了。google對你的ip地址做限制這個時候,你可以換代理重新抓。
代碼如下 復制代碼 <?php
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 //打開個文件 ,添加權限內容
[zhangy@BlackGhost test]$ cat .htaccess //下面就是.htaccess的內容
AuthType Basic
AuthName "access test"
AuthUserFile /home/zhangy/www/test/access
Require valid-user
3,不用密碼文件,也可以進行訪問控制
代碼如下 復制代碼define('ADMIN_USERNAME','tank'); // Admin Username
define('ADMIN_PASSWORD','tank'); // 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 <<<EOB
<html><body>
<h1>Rejected!</h1>
<big>Wrong Username or Password!</big>
</body></html>
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);
?>