ページをクロールする PHP CURL のいくつかの方法の紹介_PHP チュートリアル

WBOY
リリース: 2016-07-20 11:11:17
オリジナル
942 人が閲覧しました

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は、httpd.confまたはhttpd-vhosts.confを変更することで構成できます
コードは次のとおりです コードをコピーします

コピーして印刷して表示しますか?
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番目のページアクセス制御方法

コードは次のとおりです

コードをコピーしますNameVirtualHost *:10004DocumentRoot "/home/zhangy/www/test"test のルート ディレクトリに .htaccess ファイルを作成します
listen 10004
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 ファイルを使用して制御できます

コードは次のとおりですフォローします

コードをコピーします[zhangy@BlackGhost test]$ cat .htaccess  .htaccess の内容 AuthType Basic AuthName "access test"
[zhangy@BlackGhost test]$ vi .htaccess   //ファイルを開き、権限コンテンツを追加します
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);
?>


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/444653.htmlTechArticlecurl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート