ホームページ >バックエンド開発 >PHPチュートリアル >オフサイト コレクションを実装するためのカールの方法とテクニック_PHP チュートリアル

オフサイト コレクションを実装するためのカールの方法とテクニック_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:39:53771ブラウズ

カールを選んだ理由

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

    tru​​e

    http://www.bkjia.com/PHPjc/728088.html

    技術記事

    curl を選択する理由curl と file_get_contents について、わかりやすく比較すると、file_get_contents は、実際には、file_ex などの一連の組み込みファイル操作関数のマージされたバージョンです...

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。