HTTPリクエストのPHPスクリプトを記述するとき、 Curlは非常に重要なツールです。特に、ブラウザから複数のリクエストをシミュレートする必要がある場合、ログインしたり、セッションを共有したりする方法が特に重要になります。 Curlは非常に有用な関数curl_share_init()を提供します。これは、複数のCurlセッションでCookieを共有するのに役立ち、リクエストが送信されるたびに再びログインを回避するため、ログイン状態の再利用効率を大幅に改善します。
curl_share_init()は、共有ハンドルを作成するPHPの関数です。共有ハンドルにより、複数のカールセッションがCookie、セッションデータなどの同じリソースを共有できます。この関数を使用すると、異なるHTTPリクエストで同じCookie情報を共有できます。これは、複数のリクエスト間で一貫したログイン状態に役立ちます。
次の例では、 curl_share_init()を使用してCookieを共有し、複数のリクエストの再利用効率を改善する方法を示します。
<?php
// 共有ハンドルを作成します
$share = curl_share_init();
// 構成 cURL オプション,共有ハンドルを使用します
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "http://m66.net/login.php"); // ログインページURL
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_COOKIEJAR, "cookie.txt"); // 保存 Cookie
curl_setopt($ch1, CURLOPT_SHARE, $share); // リソースを共有します
$response1 = curl_exec($ch1); // 最初のリクエストを実行します,ログイン操作
curl_close($ch1);
// 秒を作成します cURL セッション,以前の共有ハンドルを活用してください
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "http://m66.net/dashboard.php"); // アクセスする前にログインする必要があるページ
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $share); // 同じ共有ハンドルを使用します
$response2 = curl_exec($ch2); // 2番目のリクエストを実行します,ユーザーの個人情報ページを取得します
curl_close($ch2);
// 2番目の要求の結果を出力します
echo $response2;
// 共有ハンドルを閉じます
curl_share_close($share);
?>
共有ハンドルを作成します:
curl_share_init()を使用して、共有リソース$共有のハンドルを作成します。この共有ハンドルは、異なるカールセッション間でCookieやその他のデータを共有するために使用されます。
最初のリクエスト:ログイン:
curl_init()を使用して、最初のCurlセッション$ ch1を作成し、ログインページのURLを設定します( http://m66.net/login.phpはこちら)です。また、 curlopt_cookiejarを使用して、ファイル( cookie.txt )を指定してCookieを保存して、後続のリクエストがこれらのCookieを引き続き使用できるようにします。
2番目のリクエスト:ユーザー情報を取得します:
2番目のカールセッション$ CH2を作成し、ログインする必要があるページURLを設定します(たとえば、 http://m66.net/dashboard.php )。 Curlopt_shareを共有ハンドル$ shareとして設定することにより、このリクエストが最初のリクエストでCookieを使用してログイン状態を再利用するようにします。
共有ハンドルを閉じます:
リクエストが完了した後、 curl_share_close()を使用して、共有ハンドル$ shareを閉じてリソースを解放します。
効率の向上:Cookieを共有することで、リクエストするたびにログインしないようにして、不要な要求を削減します。
セッションを管理するのに便利: curl_share_init()を使用すると、複数のリクエストが同じセッションデータを共有できるようになり、長年のセッション状態に便利になります。
簡素化されたコード:リソースを共有することにより、コードはより簡潔になり、メンテナンスがより便利になります。
リソース管理:共有ハンドルは多くの利便性を提供しますが、 curl_share_init()によって作成された共有ハンドルが特定のシステムリソースを占有することに注意する必要があります。したがって、使用が完了したら、リソースをリリースするためにcurl_share_close()を呼び出すことを忘れないでください。
Cookieパスとドメイン名:Cookieファイルのストレージパスがドメイン名と一致していることを確認し、異なるドメイン名間のCookieデータの干渉を回避します。異なるドメイン名でリクエストを送信する場合は、Cookieファイルを適切に構成してください。
同時リクエスト:同時リクエストを行う予定がある場合、 curl_share_init()を使用すると、Cookieデータを共有できますが、同期の問題を防ぐための同時リクエストの場合でも、慎重になる必要があります。