PHP でデータを収集する場合、単純な収集メソッド (file_get_contents など) を使用することはできませんが、ログイン ユーザーをシミュレートして収集して使用したい場合は、CURL 関数を使用する方法はありません。ログインをシミュレートしてデータを収集します
こちら 一言で言うと、デフォルトでは PHP の CURL 機能がオンになっていないため、自分でオンにする必要があります。 ;extension= php_curl.dll の前にある「;」記号を削除する必要があります。 php.ini! ! !
さて、昨夜のプログラムについて話しましょう。最終的には成功しませんでしたが、それでも何かを学びました。
コードは次のとおりです | コードをコピーします |
$login="http://www.phpyu.com/index.php?action=login"; $post_file="user= ××&pw= ××"; $cookie_file = tempnam('./temp','cookie'); |
/////一意のファイル名で一時ファイルを作成します。 成功すると、関数は新しい一時ファイル名を返します。失敗した場合は false を返します。
コードは次のとおりです | コードをコピー |
$ch=curl_init($login_url); /////CURL オブジェクトを初期化します curl_setopt($ch,CURLOPT_HEADER,0); |
// 出力にヘッダーを含めたい場合は、このオプションをゼロ以外の値に設定します。
コードは以下の通りです | コードをコピー |
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1) ///ブラウザに出力しないように設定します curl_setopt($ch,CURLOPT_POST,1); |
/////PHP に通常の HTTP POST を実行させたい場合は、このオプションをゼロ以外の値に設定します。この POST は通常の application/x-www-from-urlencoded タイプで、主に HTML フォームで使用されます。
コードは次のとおりです | コードをコピーします |
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_file); ////HTTP "POST" 操作のすべてのデータを含む文字列を渡します。 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); /////返された Cookie 情報を $cookie_jar ファイルに保存します curl_exec($ch);/// curl_close($ch);/// /Close を実行します |
模擬ログインプロセスが完了しました
次に行うことは、すでにログインしていることを忘れずに、ログイン資格情報 Cookie を保存する必要があります。 。
コードは次のとおりです | コードをコピー |
$url="http://www.phpyu.com/admin/××"; $ch =curl_init($url); curl_setopt ($ch , CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); |
////このページをブラウザで表示する場合、ここに特に注意してください! !つまり、ブラウザで表示すると、以下の $contents が true 型の true になります
コードは以下の通りです | コードをコピー |
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file) ; $contents =curl_exec($ch); |
例 2
コードは次のとおりです | コードをコピー |
フォームデータ-------------- $vars['ユーザー名' ]フォームデータ ----------------------------------- $ Method_post = TRUE // ログイン送信された URL; address (フォーム内のアクションの絶対アドレス) $url = 'http://****.com/login'; ------- $ $ CH = (); $パラメータ[Curlopt_url] = $ URL; // リクエスト URL アドレス $ Params [Curlopt_header] = TRUE; // レスポンスヘッダ情報を返すかどうか $params[CURLOPT_RETURNTRANSFER] = true; // 結果を返すかどうか $params[ CURLOPT_FOLLOWLOCATION] = true; // リダイレクトするかどうか $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) GECKO/20100101 Firefox/9.0.1 '; ; Foreach ($ VARS As $ Key = & GT; $ Value) { $ Postfields ($ key) } その場合は、直接使用してください if (isset($ _COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar']))) $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //ここで Cookie を決定します setcookie( 'cookie_jar' , $cookie_jar); // Cookie パスを保存します } curl_setopt_array($ch, $params) // Curl パラメータを渡します $content =curl_exec($) ch); // 実行します echo ' '; ------------------; /****.com/test'; $params[CURLOPT_URL] = $nexturl; $params[CURLOPT_POSTFIELDS] = ''; // 実行 echo $content;使用する 使用する - --- --------------- */ curl_close($ch) // 接続を閉じる ?>
注: https サイトをリクエストできない状況が発生した場合は、証明書またはドメイン名を検証できないことが原因である可能性があります。curl_setopt_array の前に次の 2 つの項目を追加してください:
コードは次のとおりです コピーコード |
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false ;
| |
http://www.bkjia.com/PHPjc/444640.html |
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/444640.html
技術記事
phpで収集する場合、単純な収集メソッド(file_get_contentsなど)を使用するのでそれはできませんが、ログインしているユーザーをシミュレートして収集して活用したい場合は、それを使用する方法はありません...。