ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールします。

PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールします。

WBOY
WBOYオリジナル
2023-06-13 12:21:172332ブラウズ

インターネットの発展に伴い、データにアクセスするためにログインを必要とする Web サイトがますます増えています。これは、このデータを使用する必要がある一部のプログラマーや研究者にとっては課題になります。この記事では、PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールする方法を紹介します。

模擬ログインとは何ですか?

シミュレートされたログインとは、ブラウザを使用して手動でログインするのではなく、コードを通じてログイン操作をシミュレートし、ログイン後にデータを取得することを指します。これにより、頻繁なログイン アクセスが必要な状況で時間と労力を大幅に節約できます。

PHP を使用してログインをシミュレートする手順

PHP を使用してログインをシミュレートし始める前に、いくつかの基本的な概念と手順を理解する必要があります。

  1. ログイン ページの取得

まず、ログイン ページの URL アドレスを取得する必要があります。ブラウザの開発者ツールを使用すると、ログイン フォームのアクション属性とメソッド属性を表示でき、これらの属性からフォームの送信先とメソッドがわかります。ブラウザでログイン ページに直接アクセスし、ページのソース コードを表示してログイン フォームに関する関連情報を取得することもできます。

  1. ログイン フォームの分析

次に、ログイン フォームの各フィールドを分析する必要があります。 form 要素の name 属性を確認することで、どのデータをフォームに送信する必要があるかを判断できます。正常にログインするには、送信する必要があるフィールドとそれに対応する値を明確にする必要があります。

  1. ログイン リクエストの送信

ログイン フォームを送信する前に、HTTP リクエストを作成する必要があります。 PHP のcurl 関数を使用して、HTTP リクエストを送信するブラウザをシミュレートし、同時にログイン フォーム データを POST パラメータとしてサーバーに渡すことができます。ここでは、User-Agent や Referer などの特別なリクエスト ヘッダー情報に注意する必要があります。

  1. ログイン結果の確認

最後に、ログインが成功したかどうかを確認する必要があります。ログインが成功したかどうかは、HTTP 応答コードを確認することで判断できます。通常、ログインが成功すると、サーバーは 302 ステータス コードを返し、アクセスしたいページにリダイレクトします。ログインが失敗すると、サーバーは 401 (未承認) または 403 (禁止) ステータス コードを返します。

具体的な操作

上記の基本概念を理解した上で、実際の操作を始めてみましょう。

  1. ログイン ページの取得

Zhihu Web サイトを例に挙げると、まずログイン ページの URL を取得する必要があります。

$url = 'https://www.zhihu.com/signin';
  1. ログイン フォームの分析

次に、Zhihu のログイン フォームを分析する必要があります。 form 要素の name 属性は、ブラウザー開発者ツールを使用して表示できます。

<input type="text" name="username" />
<input type="password" name="password" />
<input type="hidden" name="_xsrf" value="xxxxxx" />

上記のコードを見ると、ログイン フォームで送信する必要があるフィールドに、ユーザー名とパスワードに加えて、ランダムな文字列 _xsrf が含まれていることがわかります。このランダムな文字列は、CSRF 攻撃を防ぐために追加されます。

  1. ログイン リクエストの送信

上記の情報を使用して、ログイン操作をシミュレートする 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 リクエスト ヘッダーの偽装については、開発者ツールで見つけることができます。

  1. ログイン結果の確認

ログインに成功すると、サーバーはアクセスにログインが必要なホームページまたはその他のページにリダイレクトします。 HTTP 応答コードを調べることで、ログインが成功したかどうかを判断できます。

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($http_code == 302) {
    echo '登录成功!';
} else {
    echo '登录失败!';
}

概要

この記事では、PHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールする方法を紹介します。模擬ログインにはプライバシーの漏洩、IP のブロックなど、いくつかのリスクがあることに注意してください。したがって、これを使用する場合、対象の Web サイトのクローラー戦略を十分に理解し、関連する法令を遵守し、自身のプライバシーと権利を保護する必要があります。

以上がPHP を使用してログインをシミュレートし、アクセスするためにログインが必要な Web サイトをクロールします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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