ホームページ  >  記事  >  バックエンド開発  >  PHP は Curl を使用してシミュレートされたログインとデータ キャプチャ関数の例を実装します。

PHP は Curl を使用してシミュレートされたログインとデータ キャプチャ関数の例を実装します。

不言
不言オリジナル
2018-04-27 15:51:431598ブラウズ

この記事では、主に、模擬ログインおよびデータ キャプチャ機能を実装するための PHP の Curl の使用法を紹介し、ログイン、検証、Cookie 操作、およびデータ キャプチャのための PHP の使用法と、その他の関連する実装テクニックをサンプルの形式で分析します。この記事の例では、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 サイトの場合):

$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);

手順:

確認コードが認識できないため、ここで行うことは、確認コードの画像をキャプチャしてローカルファイルに保存し、それをプロジェクトの HTML ページに表示して、ユーザーに入力してもらいます。ユーザーが入力するのを待ちます。アカウント番号、パスワード、確認コードを入力し、送信ボタンをクリックしてから次のステップに進みます。 4. ログインフォームの送信をシミュレートします:

$ 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);

5. データをキャプチャします:

$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);

これまでのところ、データが配置されているページはキャプチャされ、文字列変数 $data に保存されています。入っています。

キャプチャされるのは Web ページの HTML ソース コードであることに注意してください。つまり、この文字列には必要なデータが含まれているだけでなく、多くの HTML タグやその他の不要なものも含まれています。そのため、必要なデータを抽出したい場合は、データが保存されているページの HTML コードを解析し、文字列操作関数や通常のマッチングなどの方法を組み合わせて必要なデータを抽出する必要があります。

上記の方法は、httpプロトコルを使用する一般的なWebサイトに有効です。ただし、https プロトコルを使用する Web サイトへのログインをシミュレートする場合は、次の処理を追加する必要があります:

1. https 検証をスキップする:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

2. ユーザー エージェントを使用する:

$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);

注:

これらのプロセスを追加しない場合、模擬ログインは成功しません。

上記のプログラムを使用して Web サイトへのログインをシミュレートすることは通常成功しますが、実際には、シミュレートされる Web サイトの特定の条件に基づいて検討する必要があります。例: 一部の Web サイトではエンコーディングが異なるため、キャプチャしたページが文字化けします。このとき、 gbk エンコーディングを utf8 エンコーディングに変換するなどのエンコーディング変換を実行する必要があります。また、オンライン バンキングなど、比較的高いセキュリティ要件を備えた Web サイトでは、インライン フレームに検証コードが配置される場合もあります。この場合、まずインライン フレームのページをクロールしてから、検証のアドレスを抽出する必要があります。そこからコードをもう一度取得してください。また、Web サイトによっては JS コードでフォームを送信する場合もあります。フォームを送信する前に暗号化などの処理が行われるため、直接送信すると送信できなくなります。同様の処理を行った後に送信する必要がありますが、この場合、暗号化などの具体的な操作がわかれば、同様の処理を行うことができます。実行してからデータを送信するので、成功する可能性もあります。ただし、ここで重要な点が発生します。たとえば、暗号化されているものの、具体的な暗号化アルゴリズムがわからない場合、同じ操作を実行することはできません。となり、正常にログインできなくなります。この点での典型的な例は、オンライン バンキング コントロールを使用して、JS コードでフォームを送信する前に、ユーザーが送信したパスワードと確認コードに対して何らかの処理を実行します。したがって、それをシミュレートすることはできません。この記事を読んで、オンライン バンキングへのログインをシミュレートできると思った人は、銀行の Web サイトへのログインを簡単にシミュレートできるでしょうか?もちろん、オンライン バンキングの制御を突破できるかどうかは別の問題です。そうは言っても、なぜ私はこの問題に遭遇したので、あまり話さないと涙が出てしまいます。 。 。

関連する推奨事項:

$data = iconv("gb2312", "utf-8",$data);

phpはタスク分散にgearmanを使用します

PHPがzlib拡張機能を使用してGZIP圧縮出力を実装する方法

PHPはNginxを使用してリバースプロキシを実装する方法

以上がPHP は Curl を使用してシミュレートされたログインとデータ キャプチャ関数の例を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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