今回は、PHP で Curl を使用してログインをシミュレートし、データをキャプチャする手順について詳しく説明します。PHP で Curl を使用してシミュレートされたログインとデータをキャプチャするための注意事項は何ですか? 以下は実際的なケースです。 、見てみましょう。
PHP の Curl 拡張ライブラリを使用すると、ログインをシミュレートし、ユーザー アカウントでログインした後にのみ表示できる一部のデータをキャプチャできます。具体的な実装プロセスは次のとおりです (個人的な概要): 1. まず、対応するログイン ページの HTML ソース コードを分析して、必要な情報を取得する必要があります。 (1) ログイン ページのアドレス(2)
認証コードのアドレス (3) ログインフォームで送信する必要がある各フィールドの名前と送信方法
(4) ログインフォームを送信するアドレス
(5) さらに、キャプチャするデータがどこのアドレスであるかを知る必要があります。
2. Cookie を取得して保存します (Cookie ファイルを使用する Web サイトの場合):
$login_url = 'http://www.xxxxx'; //登录页面地址 $cookie_file = dirname(FILE)."/pic.cookie"; //cookie文件存放位置(自定义) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch);
3. 確認コードを取得して保存します (確認コードを使用する Web サイトの場合):
検証コードの識別を実装できないため、ここで行うことは、検証コードの画像をキャプチャしてローカル ファイルに保存し、それをプロジェクトの HTML ページに表示して、ユーザーに入力させ、ユーザーの入力を待つことです。アカウント番号、パスワード、確認コードを入力し、次のステップに進む前に送信ボタンをクリックしてください。4. ログインフォームの送信をシミュレートする:
$verify_url = "http://www.xxxx"; //验证码地址 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $verify_url); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $verify_img = curl_exec($ch); curl_close($ch); $fp = fopen("./verify/verifyCode.png",'w'); //把抓取到的图片文件写入本地图片文件保存 fwrite($fp, $verify_img); fclose($fp);
$ post_url = 'http://www.xxxx'; //登录表单提交地址 $post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ post_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //提交方式为post curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_exec($ch); curl_close($ch);
string
変数 $data に保存されています。 キャプチャされるのは Web ページの HTML ソース コードであることに注意してください。つまり、この文字列には必要なデータが含まれるだけでなく、多くの 上記の方法は、httpプロトコルを使用する一般的なWebサイトに有効です。ただし、https プロトコルを使用する Web サイトへのログインをシミュレートしたい場合は、次の処理を追加する必要があります:$data_url = "http://www.xxxx"; //数据所在地址 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $data_url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $data = curl_exec($ch); curl_close($ch);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
注:
これらのプロセスを使用すると、模擬ログインは成功しません。 上記のプログラムを使用して Web サイトへのログインをシミュレートすることは、通常は成功しますが、実際には、シミュレートされる Web サイトの特定の条件に基づいて検討する必要があります。例: 一部の Web サイトではエンコーディングが異なるため、キャプチャしたページが文字化けします。このとき、 gbk エンコーディングを utf8 エンコーディングに変換するなどのエンコーディング変換を実行する必要があります。また、オンライン バンキングなど、比較的高いセキュリティ要件を備えた Web サイトでは、インライン フレームに検証コードが配置される場合もあります。この場合、まずインライン フレームのページをクロールしてから、検証のアドレスを抽出する必要があります。そこからコードをもう一度取得してください。また、Web サイトによっては JS コードでフォームを送信する場合もあります。フォームを送信する前に暗号化などの処理も行われるため、直接送信すると送信できなくなります。正常にログインするには同様の処理を行った後にSubmitする必要がありますが、この場合、暗号化などのJSコード内で実行される具体的な操作、暗号化アルゴリズムが何であるかがわかれば、同様の処理を実行できます。を選択してデータを送信すると、成功することもあります。ただし、ここで重要な点が発生します。たとえば、暗号化されているものの、具体的な暗号化アルゴリズムがわからない場合、同じ操作を実行することはできません。となり、正常にログインできなくなります。この点での典型的な例は、オンライン バンキング コントロールを使用して、JS コードでフォームを送信する前に、ユーザーが送信したパスワードと確認コードに対して何らかの処理を実行します。したがって、シミュレーションすることはできません。この記事を読んで、オンライン バンキングへのログインをシミュレートできると思った人は、銀行の Web サイトへのログインを簡単にシミュレートできるでしょうか?もちろん、オンライン バンキングの制御を突破できるかどうかは別の問題です。そうは言っても、なぜ私はこの問題に遭遇したので、あまり話さないと涙が出てしまいます。 。 。 この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。 推奨書籍:
以上がCurl を使用して PHP を使用してログインをシミュレートし、データをキャプチャする手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。