インターネットの発展に伴い、データにアクセスするためにログインを必要とする Web サイトがますます増えています。これは、このデータを使用する必要がある一部のプログラマーや研究者にとっては課題になります。この記事では、PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールする方法を紹介します。
模擬ログインとは何ですか?
シミュレートされたログインとは、ブラウザを使用して手動でログインするのではなく、コードを通じてログイン操作をシミュレートし、ログイン後にデータを取得することを指します。これにより、頻繁なログイン アクセスが必要な状況で時間と労力を大幅に節約できます。
PHP を使用してログインをシミュレートする手順
PHP を使用してログインをシミュレートし始める前に、いくつかの基本的な概念と手順を理解する必要があります。
まず、ログイン ページの URL アドレスを取得する必要があります。ブラウザの開発者ツールを使用すると、ログイン フォームのアクション属性とメソッド属性を表示でき、これらの属性からフォームの送信先とメソッドがわかります。ブラウザでログイン ページに直接アクセスし、ページのソース コードを表示してログイン フォームに関する関連情報を取得することもできます。
次に、ログイン フォームの各フィールドを分析する必要があります。 form 要素の name 属性を確認することで、どのデータをフォームに送信する必要があるかを判断できます。正常にログインするには、送信する必要があるフィールドとそれに対応する値を明確にする必要があります。
ログイン フォームを送信する前に、HTTP リクエストを作成する必要があります。 PHP のcurl 関数を使用して、HTTP リクエストを送信するブラウザをシミュレートし、同時にログイン フォーム データを POST パラメータとしてサーバーに渡すことができます。ここでは、User-Agent や Referer などの特別なリクエスト ヘッダー情報に注意する必要があります。
最後に、ログインが成功したかどうかを確認する必要があります。ログインが成功したかどうかは、HTTP 応答コードを確認することで判断できます。通常、ログインが成功すると、サーバーは 302 ステータス コードを返し、アクセスしたいページにリダイレクトします。ログインが失敗すると、サーバーは 401 (未承認) または 403 (禁止) ステータス コードを返します。
具体的な操作
上記の基本概念を理解した上で、実際の操作を始めてみましょう。
Zhihu Web サイトを例に挙げると、まずログイン ページの URL を取得する必要があります。
$url = 'https://www.zhihu.com/signin';
次に、Zhihu のログイン フォームを分析する必要があります。 form 要素の name 属性は、ブラウザー開発者ツールを使用して表示できます。
<input type="text" name="username" /> <input type="password" name="password" /> <input type="hidden" name="_xsrf" value="xxxxxx" />
上記のコードを見ると、ログイン フォームで送信する必要があるフィールドに、ユーザー名とパスワードに加えて、ランダムな文字列 _xsrf が含まれていることがわかります。このランダムな文字列は、CSRF 攻撃を防ぐために追加されます。
上記の情報を使用して、ログイン操作をシミュレートする HTTP リクエストを作成できます。
$url = 'https://www.zhihu.com/login/phone_num'; $data = array( 'phone_num' => 'your_phone_number', 'password' => 'your_password', '_xsrf' => 'xxxxxx' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36', 'Referer: https://www.zhihu.com/signin' )); $response = curl_exec($ch); curl_close($ch); echo $response;
上記のコードでは、curl 関数を使用して、送信するデータ、リクエスト ヘッダー情報、Cookie 情報を含む POST リクエストを作成します。このうち、COOKIEJAR と COOKIEFILE は、ログインが必要なページにアクセスするときに後で使用できるように Cookie 情報を保存するために使用されます。 HTTP リクエスト ヘッダーの偽装については、開発者ツールで見つけることができます。
ログインに成功すると、サーバーはアクセスにログインが必要なホームページまたはその他のページにリダイレクトします。 HTTP 応答コードを調べることで、ログインが成功したかどうかを判断できます。
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($http_code == 302) { echo '登录成功!'; } else { echo '登录失败!'; }
概要
この記事では、PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールする方法を紹介します。模擬ログインにはプライバシーの漏洩、IP のブロックなど、いくつかのリスクがあることに注意してください。したがって、これを使用する場合、対象の Web サイトのクローラー戦略を十分に理解し、関連する法令を遵守し、自身のプライバシーと権利を保護する必要があります。
以上がPHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。