ネットワークリクエストにPHPを使用する場合、ブラウザの動作、特に検証コードの検証問題をシミュレートする必要がある状況に遭遇することがよくあります。検証コードは、自動化されたプログラムがフォームの提出を防ぐために使用される手法です。通常、ユーザーは表示された文字を入力するか、特定の画像をクリックして人間のアイデンティティを確認する必要があります。この場合、Curlライブラリを使用してブラウザの動作をシミュレートすることは効果的なソリューションです。
Curlは、HTTPリクエストを外部サーバーに送信するのに役立つ強力なPHPライブラリであり、検証コード検証のために処理する必要があるリクエストについては、HTTP、HTTPS、FTPなどの複数のプロトコルをサポートすることができます。この時点で、 Curl_share_init関数を使用して共有Cookieを実装することができ、それにより検証コードの頻繁な検証の問題を解決できます。
curl_share_initは、ハンドルを共有リソースに初期化するためにCurlが提供する関数です。通常、複数のCurl要求の間でCookie、DNS、その他の情報を共有するために使用されます。この関数により、複数のCurlリクエストが同じCookieを共有できます。これは、同じサイトを複数回リクエストし、ログインまたは認証されたままにする必要があるシナリオに役立ちます。
Cookieを共有することで、リクエストするたびに検証コードの再獲得を避けることができます。これにより、ブラウザの動作をより効果的にシミュレートし、頻繁に検証コードの検証を回避できます。
Curl_share_init関数を使用してCookieをキャッシュし、複数のリクエストで共有する方法を示す簡単な例を以下に示します。
<?php
// 共有ハンドルを初期化します
$ch_share = curl_share_init();
// 最初のものを初期化します cURL 聞く
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/login"); // アクセスする必要があるURLに置き換えます
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_COOKIEJAR, "cookies.txt"); // 保存 Cookie ファイルに移動します
curl_setopt($ch1, CURLOPT_SHARE, $ch_share); // 共有 Cookie
$response1 = curl_exec($ch1);
// アナログ入力検証コードの後に送信します
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/submit_form"); // フォームを提出する必要があるURLに置き換えます
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_POST, true);
curl_setopt($ch2, CURLOPT_POSTFIELDS, [
'username' => 'testuser',
'password' => 'testpassword',
'captcha' => 'captcha_code' // 検証コードが入力されたと仮定します
]);
curl_setopt($ch2, CURLOPT_SHARE, $ch_share); // 共有 Cookie
$response2 = curl_exec($ch2);
// 閉鎖 cURL 聞く
curl_close($ch1);
curl_close($ch2);
// 閉鎖共有句柄
curl_share_close($ch_share);
// 输出聞く结果
echo "Response from first request: " . $response1;
echo "Response from second request: " . $response2;
?>
共有ハンドルの初期化: curl_share_initを使用して、共有ハンドル$ ch_shareを初期化します。
最初のリクエスト:最初のCurlリクエストでは、 curl_setoptを使用してURLを設定し、コンテンツを返し、 Cookiejarパラメーターを設定し、CookieがCookies.txtファイルに保存されていることを示します。このリクエストは、最初のアクセスプロセスをシミュレートする検証コードページをローカルにリクエストします。
2番目のリクエスト:2番目のリクエストでは、ユーザー名、パスワード、および検証コードを備えたフォームを送信します。 Curlopt_shareパラメーターを共有ハンドル$ ch_shareに設定することにより、2番目の要求が最初の要求でCookieを再利用できるようにするため、重複検証コード検証を回避できます。
閉じるリソース:リクエストが完了した後、 curl_closeを使用して各Curlセッションを閉じ、最後にcurl_share_closeを使用して共有ハンドルを閉じます。
重複した検証コード検証を避けてください:Cookieを共有することにより、同じログインステータスと認証情報を複数のリクエストで再利用でき、要求するたびに検証コードの再入力を回避できます。
効率の向上:各要求が検証コードを再取得する必要がある場合、ユーザーエクスペリエンスに影響を与えるだけでなく、ネットワークリクエストの時間を増やします。共有Cookieを使用すると、リクエストの効率を大幅に向上させることができます。
共有リソースの制限: curl_share_initは複数のリクエストでリソースを共有するのに役立ちますが、リソースの競争や例外につながる可能性があるため、あまりにも多くの同時リクエストで同じ共有ハンドルを使用しないようにしてください。
Curl_share_initを使用してCurl要求のCookieを共有することは、検証コード検証の問題を解決するための効果的な方法です。複数のリクエストが必要な場合、Cookieのキャッシュと共有により、検証コード入力を複製し、運用効率を改善できます。ログイン検証であろうとフォームの送信であろうと、カール共有メカニズムは、ブラウザの動作をよりよくシミュレートし、検証コードによって引き起こされる干渉を減らすのに役立ちます。