Curl は主にデータをキャプチャします。もちろん、fsockopen、file_get_contents などの他のメソッドを使用してデータをキャプチャすることもできます。ただし、ページ アクセス制御が行われているページやログイン後のページをキャプチャする場合は、より困難になります。
PHPホームページを取得してファイルに入れることです。
例 1. PHP の CURL モジュールを使用して 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 アドレスを制限している場合は、プロキシを変更して再度クロールできます。
コードは次のとおりです | コードをコピー |
$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、投稿 データを取得した後、データの送信については別途説明します。curl を使用する場合、データのやり取りが頻繁に発生するため、データの送信の方が重要です。
コードは以下の通りです コードをコピー | |
$ch =curl_init(); /*ここで注意すべき点は、送信するデータは2次元ではないことですarray 以上
*例: array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')
*例 array('name' =>array('tank','zhang'),'sex'=>1,'birth'=>'20101010') これはエラーを報告します*/
$data = array ('名前' => 'テスト', '性別'=>1,'誕生'=>'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で出力した内容の配列を取り出します( [name] => test [sex] => 1 [birth] => 20101010 )
4. ページ アクセス制御を使用して一部のページをクロールする
ページ アクセス制御の 3 つの方法
ページ アクセス制御の 3 つの方法 Zhang Ying 公開日: 2010-10-12
カテゴリー ディレクトリ: apache/nginx
この現象、下の写真を見てください
Apache ページのアクセス制御
なぜこのような制御を実行する必要があるのでしょうか? この保護は比較的低レベルですが、それでもある程度は役立ちます。
まず、htpasswdコマンドを使用して権限制御ファイルを生成します
コードは次のとおりです | コードをコピーします |
コピーして印刷して表示しますか? 1.[zhangy@BlackGhost test]$ htpasswd - c ./access Tank // パスワード ファイルを生成します。 .[zhangy@BlackGhost test]$ cat access // パスワード ファイルを確認します 6.tank:Uj5B3qIF/BNdI // ユーザー名は平文で、パスワードは暗号化されています。 [zhangy@BlackGhost test]$ htpasswd -c ./access Tank //パスワード ファイルを生成します。 -c は新しいファイルを作成します。 htpasswd -h を表示できます 新しいパスワード: //パスワードを繰り返す ユーザーのパスワードを追加Tank [zhangy@BlackGhost test]$ cat access //パスワードファイルを確認してください tank:Uj5B3qIF/BNdI //ユーザー名は平文で、パスワードは暗号化されています。この時点でパスワードファイルが生成されます。
2番目のページアクセス制御方法 | 1は、httpd.confまたはhttpd-vhosts.confを変更することで構成できます
コードは次のとおりです
コードをコピーします | listen 10004 | NameVirtualHost *:10004
DocumentRoot "/home/zhangy/www/test"ServerName *:10004 BandwidthModule On ForceBandWidthModule On 帯域幅すべて 102 MinBandwidth すべて 50000 LargeFileLimit * 500 50000 MaxConnection all 2
エラーログ "/home/zhangy/apache/blog.51yip.com.com-error.log" カスタムログ "/home/zhangy/apache/blog.51yip.com-access.log" common // 以下の設定を見てください AuthType Basic AuthName "access test" AuthUserFile /home/zhangy/www/test/access Require valid-user
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); ?> |
|
http://www.bkjia.com/PHPjc/444653.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444653.htmlTechArticlecurl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页...