カールを選んだ理由
curl と file_get_contents について、わかりやすい比較を抜粋します。
file_get_contents は、実際には、file_exists、fopen、fread、fclose などの一連の組み込みファイル操作関数のマージされたバージョンであり、怠け者向けに特別に提供されています。主にローカル ファイルを処理するために使用されますが、怠け者のため、ネットワーク ファイルのサポートも追加されます
curl は、ネットワーク インタラクションに特別に使用されるライブラリであり、さまざまな環境に対処するための多数のカスタム オプションを提供します。安定性は当然 file_get_contents よりも優れています。
使用方法
1.カールサポートを有効にする
PHP 環境のインストール後、curl サポートはデフォルトでは有効になっていないため、php.ini ファイルを変更して、extension=php_curl.dll を見つけ、先頭のコロンを削除して、サービスを再起動する必要があります。
2.curlを使用してデータをキャプチャします
コードをコピーします コードは次のとおりです:
//cURLオブジェクトを初期化します
$curl =curl_init()
//クロールする必要があるURLを設定します
curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');
// ヘッダーを設定します
curl_setopt($curl, CURLOPT_HEADER, 1); 結果を文字列に保存するか画面に出力するように cURL パラメータを設定します。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// cURL を実行し、Web ページをリクエストします
$data =curl_exec($curl)
// URL を閉じるリクエスト
curl_close($curl);
3. 定期的なマッチングによるキーデータの検索
コードをコピーします コードは次のとおりです:
//$dataはcurl_execによって返される値であり、収集されたターゲットコンテンツです
preg_match_all("/
(.*?) /",$data, $out, PREG_SET_ORDER);
foreach($out as $key => $value){
//ここで $value は配列であり、一致する文字が見つかった整数 文と個別に一致した文字
echo '一致した文全体: '.$value[0].'
';
echo '一致した単一の文字: '.$value[1].'
'; }
ヒント
1.タイムアウト関連の設定
curl_setopt($ch, opt) を介して、主に次のようないくつかのタイムアウト設定を設定できます:
CURLOPT_TIMEOUT は、cURL の実行が許可される最大秒数を設定します。
CURLOPT_TIMEOUT_MS は、cURL の実行が許可される最大ミリ秒数を設定します。 (cURL 7.16.2 で追加。PHP 5.2.3 から利用可能。)
CURLOPT_CONNECTTIMEOUT 接続を開始するまでの待機時間。0 に設定すると、無限に待機します。
CURLOPT_CONNECTTIMEOUT_MS 接続試行を待機する時間 (ミリ秒単位)。 0 に設定すると、無限に待機します。 cURL 7.16.2 で追加されました。 PHP 5.2.3 以降で利用可能です。
CURLOPT_DNS_CACHE_TIMEOUT は、DNS 情報をメモリに保存する時間を設定します。デフォルトは 120 秒です。
コードをコピーします コードは次のとおりです:
curl_setopt($ch, CURLOPT_TIMEOUT, 60) //秒数を設定するだけです
curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意: ミリ秒のタイムアウトを設定する必要があります
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); // ミリ秒単位のタイムアウト。cURL 7.16.2 で追加されました。 PHP 5.2.3 以降で利用可能
2. 投稿を通じてデータを送信し、Cookie を保持します
コードをコピーします
コードは次のとおりです:
//以下は学習と参考のための例です:
//Curl は DZ7.0 に適したログイン ディスカス プログラムをシミュレートします
!extension_loaded('curl') && die('カール拡張機能がロードされていません。') ;
$discuz_url = 'http://www.lxvoip.com';//フォーラムのアドレス
$login_url = $discuz_url .'/logging.php?action=login';//ログインページのアドレス
$get_url = $ discuz_url .'/my.php?item=threads'; //私の投稿
$post_fields = array();
//次の 2 つの項目は変更する必要はありません
$post_fields['loginfield'] = 'username ';
$post_fields['loginsubmit'] = 'true';
//ユーザー名とパスワードを入力する必要があります
$post_fields['username'] = 'lxvoip' = '88888888 ';
// セキュリティの質問
$post_fields['answer'] = '';
//FORMHASH を取得します
$ch =curl_init($login_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); close($ch);
preg_match('//i', $contents, $matches);
if (!empty($matches)) {
$formhash = $matches[1];
die('フォーラムハッシュが見つかりません。');
//POST データCOOKIE を取得
$cookie_file = dirname(__FILE__) .
//$cookie_file = tempnam('/tmp');
curl_setopt($ch, CURLOPT_HEADER, 0); $ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_exec($ ch);
curl_close($ch);
// 表示するためにログインする必要があるページのコンテンツを取得するには、
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
var_dump($ch); ;
http://www.bkjia.com/PHPjc/728088.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/728088.html
技術記事
curl を選択する理由curl と file_get_contents について、わかりやすく比較すると、file_get_contents は、実際には、file_ex などの一連の組み込みファイル操作関数のマージされたバージョンです...