CAPSOLVER
ブログ
PHPでCloudflareを解決する方法

PHPでCloudflareを解決する方法

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

26-Nov-2024

CloudflareはあなたのPHPスクレイパーを検出できますか?ブロックされることなく、その強力な防御策を回避する方法はありますか?強力なセキュリティ対策で知られるCloudflareは、Turnstile CAPTCHAやBot Managementなどのツールを使用して、ボットや疑わしいアクティビティをフィルタリングしています。これらの保護機能は、自動化されたものを検出してブロックすることに大きく依存しているPHPスクレイパーにとって大きな課題となっています。

PHPを使用してCloudflareで保護されたサイトをスクレイピングする可能性を高める方法を詳しく見ていきましょう。ただし、常に進化しているこのセキュリティシステムに対して、保証された解決策はないことを念頭に置いてください。

Cloudflareとは?

Cloudflareは、ボット、スパマー、サービス拒否(DoS)攻撃など、さまざまなオンラインの脅威からウェブサイトを保護するために設計された、広く使用されているセキュリティおよびコンテンツ配信ネットワーク(CDN)です。ウェブサイトのサーバーとその訪問者の間の仲介者として機能し、幅広い基準に基づいてリクエストをフィルタリングし、正当なトラフィックのみがサーバーに到達するようにします。Cloudflareの堅牢なネットワークとセキュリティツールは、ウェブサイトの読み込み速度を速め、望ましくない、または有害なやり取りから保護するのに役立ちます。

なぜCloudflareはPHPスクレイパーにとって困難なのか?

Cloudflareは、洗練されたボット検出システムのために、PHPスクレイパーにとって共通の課題となっています。潜在的に自動化された、または疑わしいアクティビティを検出した場合、Cloudflareは訪問者の正当性を検証するためにさまざまなセキュリティ対策を展開できます。これらの対策には以下が含まれます。

JavaScriptチャレンジ

Cloudflareは、多くの場合、JavaScriptベースのチャレンジ(JavaScriptの「攻撃を受けています」モードとも呼ばれます)を提供します。これは、サイトへのアクセスを得る前にユーザーにJavaScriptを実行させることを要求します。これは、PHPがネイティブにJavaScriptの実行を処理しないため、PHPスクレイパーにとって特に困難です。解決策は、多くの場合、JavaScriptの実行をシミュレートできるヘッドレスブラウザやその他のツールとの統合を伴います。

Turnstile CAPTCHAおよびその他のCAPTCHA

CAPTCHAは、Cloudflareが人間の操作を確認するために使用するもう1つのセキュリティレイヤーです。特にTurnstile CAPTCHAは、自動化されたボットが保護されたページにアクセスするのを防ぐために使用されます。これらのCAPTCHAを解決するには、CAPTCHA解決サービスまたは手動による介入が必要です。PHPだけでは、CAPTCHAを解釈して対応する機能がありません。

ボット管理

Cloudflareの高度なボット管理システムは、機械学習を使用して、ボットに典型的なパターンと行動を検出します。リクエストの頻度、ユーザーエージェントの一貫性、IPレピュテーションなどの詳細を追跡することにより、Cloudflareは高い精度でボットを識別してブロックできます。これは、高頻度または繰り返しリクエストを送信するスクレイパーにとって特に困難です。

IPベースのブロックとレート制限

CloudflareはIPアドレスを監視し、レート制限を適用して、疑わしいトラフィックを検出し、制限します。スクレイパーの場合、これは、同じIPアドレスからの繰り返しリクエストはフラグが立てられ、ブロックされる可能性が高いことを意味します。これを回避するには、プロキシまたはローテーションプロキシサービスを通じてIPを頻繁にローテーションする必要がありますが、これには複雑さとコストが追加される可能性があります。

セッションとCookieの管理

ユーザーをさらに検証するために、CloudflareはセッションとCookieを追跡します。PHPスクレイパーは、リクエスト全体で単一のユーザーセッションを維持するために、Cookieとセッションを一貫して管理する必要があります。これは、高度なCookie処理機能なしでは、技術的に実装が困難です。

要約すると、Cloudflareの多層防御は、自動化されたトラフィックを検出して防止するように設計されており、PHPスクレイピングの取り組みを特に困難にしています。

PHPでCloudflareを解決する方法

Cloudflareは、JavaScriptチャレンジ、CAPTCHA、高度なボット管理システムなどの堅牢なボット検出とセキュリティ対策により、Webスクレイピングにとって大きな課題をもたらします。PHPを使用してCloudflareで保護されたWebサイトをスクレイピングしようとすると、開発者はJavaScriptの実行、セッションの処理、CAPTCHAの解決などの問題に直面することがよくあります。

試行1:Selenium Stealthを使用した自動化

Cloudflareの防御策を解決するための一般的なアプローチの1つは、Selenium Stealthなどのヘッドレスブラウザと自動化ツールを使用することです。Selenium Stealthは、より人間らしいブラウジング動作をシミュレートすることで検出を減らすように設計された、Selenium WebDriverの拡張レイヤーです。

- PHPでのSelenium Stealthのコード例

php Copy
// 必要なライブラリをロード
require_once 'vendor/autoload.php';

use Facebook\WebDriver\Remote\RemoteWebDriver;
use SapiStudio\SeleniumStealth\SeleniumStealth;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Chrome\ChromeOptions;

// SeleniumサーバーのURL
$serverUrl = 'http://localhost:4444';

// ブラウザの機能とオプションを定義
$chromeOptions = new ChromeOptions();
$chromeOptions->addArguments(['--headless', '--disable-gpu', '--no-sandbox']); // 自動化のためのヘッドレスモード

$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $chromeOptions);

// WebDriverを初期化
$driver = RemoteWebDriver::create($serverUrl, $capabilities);

// Selenium StealthでWebDriverを拡張
$stealthDriver = (new SeleniumStealth($driver))->usePhpWebriverClient()->makeStealth();

// ブラウザウィンドウを最大化
$stealthDriver->manage()->window()->maximize();

// ターゲットURLに移動
$url = 'https://www.scrapingcourse.com/cloudflare-challenge';
$stealthDriver->get($url);

// ページソースを取得して印刷
$html = $stealthDriver->getPageSource();
echo $html;

// ブラウザセッションを閉じる
$stealthDriver->quit();

Selenium Stealthを使用することの課題

Selenium Stealthは有望なアプローチですが、大きな欠点があります。

  1. 高い検出リスク: Cloudflareの高度な検出メカニズムは、特に大量に使用されている場合、Seleniumベースのブラウザをボットとしてフラグを立てる可能性があります。
  2. 要素処理の問題: チャレンジを解決するためにページ要素を識別して操作することは、信頼性が低い可能性があります。
  3. パフォーマンスのオーバーヘッド: 複数のヘッドレスブラウザを同時に実行すると、大量のシステムリソースが消費されるため、スケーリングが困難になります。

Selenium Stealthは単純な防御策を解決できますが、Cloudflareの高度なセキュリティ対策を処理するための最良の解決策ではありません。

試行2:CapSolver APIの使用

CapSolverは、Cloudflareの課題を解決するための堅牢なAPI駆動型アプローチを提供します。リソースを大量に消費する自動化に依存するのではなく、強力なCAPTCHA解決テクノロジーを活用して、Turnstile CAPTCHAやJavaScriptベースのチャレンジなどのCloudflareの課題を処理します。

CapSolverを使用することの利点

  1. 効率性: 手動による介入なしに、CAPTCHAやその他の課題を迅速に解決します。
  2. スケーラビリティ: 複数のブラウザを実行するオーバーヘッドがないため、大規模な運用に適しています。
  3. シンプルさ: PHPやその他のプログラミング言語との簡単な統合を提供します。
  4. 信頼性: 最も複雑な課題でも高い精度で処理します。

PHPでのCapSolverのコード例

次のコードは、CapSolverを使用してCloudflareの課題を解決し、保護されたWebサイトにログインする方法を示しています。

php Copy
require 'vendor/autoload.php';

use GuzzleHttp\Client;

define("CAPSOLVER_API_KEY", "CAI-API_KEY");
define("PAGE_URL", "https://dash.cloudflare.com/login");
define("SITE_KEY", "0x4AAAAAAAJel0iaAR3mgkjp");

function callCapsolver() {
    $client = new Client();
    $data = [
        "clientKey" => CAPSOLVER_API_KEY,
        "task" => [
            "type" => "AntiTurnstileTaskProxyLess",
            "websiteURL" => PAGE_URL,
            "websiteKey" => SITE_KEY,
            "metadata" => ["action" => "login"]
        ]
    ];

    try {
        // タスクを作成
        $response = $client->post('https://api.capsolver.com/createTask', [
            'json' => $data
        ]);
        $resp = json_decode($response->getBody(), true);
        $taskId = $resp['taskId'] ?? null;

        if (!$taskId) {
            echo "No taskId found: " . $response->getBody() . PHP_EOL;
            return null;
        }

        echo "Created taskId: $taskId" . PHP_EOL;

        // タスクの結果をポーリング
        while (true) {
            sleep(1); // 1秒待つ
            $resultResponse = $client->post('https://api.capsolver.com/getTaskResult', [
                'json' => [
                    "clientKey" => CAPSOLVER_API_KEY,
                    "taskId" => $taskId
                ]
            ]);
            $result = json_decode($resultResponse->getBody(), true);
            $status = $result['status'] ?? '';

            if ($status === "ready") {
                echo "Successfully solved: " . $resultResponse->getBody() . PHP_EOL;
                return $result['solution'] ?? null;
            }

            if ($status === "failed" || isset($result['errorId'])) {
                echo "Failed: " . $resultResponse->getBody() . PHP_EOL;
                return null;
            }
        }
    } catch (Exception $e) {
        echo "Error: " . $e->getMessage() . PHP_EOL;
        return null;
    }
}

function login($token, $userAgent) {
    $client = new Client();
    $headers = [
        'Cookie' => "cf_clearance=$token",
        'Host' => 'dash.cloudflare.com',
        'User-Agent' => $userAgent
    ];

    $data = [
        "cf_challenge_response" => $token,
        "email" => "example@gmail.com",
        "password" => "example_password"
    ];

    try {
        $response = $client->post('https://dash.cloudflare.com/api/v4/login', [
            'headers' => $headers,
            'form_params' => $data
        ]);

        echo "Login Response Status Code: " . $response->getStatusCode() . PHP_EOL;
        if ($response->getStatusCode() !== 403) {
            echo "Login Response: " . $response->getBody() . PHP_EOL;
        }
    } catch (Exception $e) {
        echo "Login Error: " . $e->getMessage() . PHP_EOL;
    }
}

function run() {
    $solution = callCapsolver();
    $token = $solution['token'] ?? null;

    if ($token) {
        login($token, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36");
    }
}

run();

なぜSelenium StealthよりもCapSolverを選ぶのか?

  1. リソース効率: ヘッドレスブラウザを実行する必要がないため、サーバーコストとメモリ消費を削減できます。
  2. 実装の容易さ: 複雑なブラウザ構成なしで、簡単なAPI統合ができます。
  3. 成功率: Cloudflareの高度な防御策を回避する信頼性の高さが向上します。
  4. エンタープライズ向けにスケーラブル: 大量のCAPTCHA解決を必要とするシナリオに最適です。

CapSolverとその機能の詳細については、CapSolverのドキュメントをご覧ください。

最高のCAPTCHAソリューションのためのボーナスコードを請求してください。CapSolver: WEBS。それを引き換えた後、各チャージ後に5%の追加ボーナスが受け取れ、無制限です。

結論

Cloudflareの防御策は常に進化しており、PHPスクレイパーがそれらを解決することはますます困難になっています。Selenium Stealthのような自動化ツールは基本的なシナリオを処理できますが、CapSolverは高度な課題に対処するためのより堅牢で効率的でスケーラブルなソリューションを提供します。CapSolverのAPIを使用すると、複雑なブラウザ自動化を管理する手間をかけずに、より迅速で信頼性の高い結果を得ることができます。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

AIによる画像認識:基礎と解決策
AIによる画像認識:基礎と解決策

画像CAPTCHAの苦労とはもうお別れ!CapSolver Vision Engineが、高速・スマート・そして手間いらずで解決します!

Logo of CapSolver

Sora Fujimoto

25-Apr-2025

Webスクレイピングに最適なユーザーエージェントと使用方法
Webスクレイピングに最適なユーザーエージェントと使用方法

ウェブスクレイピングにおける最良のユーザーエージェントガイドと、検知回避のための効果的な使用方法。ユーザーエージェントの重要性、種類、シームレスで検知されないウェブスクレイピングのための使用方法を解説します。

Logo of CapSolver

Sora Fujimoto

07-Mar-2025

Webスクレイピングと自動化のためのCloudflare JSチャレンジの解決方法
Webスクレイピングと自動化のためのCloudflare JSチャレンジの解決方法

CloudflareのJavaScriptチャレンジを解決し、シームレスなウェブスクレイピングと自動化を実現する方法を学びましょう。ヘッドレスブラウザ、プロキシローテーション、そしてCapSolverの先進的なCAPTCHA解決機能の活用など、効果的な戦略を発見してください。

Cloudflare
Logo of CapSolver

Sora Fujimoto

05-Mar-2025

Cloudflare TLSフィンガープリンティング:その仕組みと解決策
Cloudflare TLSフィンガープリンティング:概要と解決策

CloudflareのTLSフィンガープリンティングによるセキュリティへの活用、ボットの検出とブロック方法、ならびにWebスクレイピングや自動ブラウジングタスクにおける解決策を学びましょう。

Cloudflare
Logo of CapSolver

Sora Fujimoto

28-Feb-2025

なぜ私は何度もロボットでないことを確認するよう求められるのですか?
なぜ私は何度もロボットでないことの確認を求められるのですか?

Googleがロボットではないことを確認するよう促す理由を学び、CapSolverのAPIを使用してCAPTCHAチャレンジを効率的に解決するなどのソリューションを探ります。

Logo of CapSolver

Sora Fujimoto

25-Feb-2025

Cloudflareで保護されたウェブサイトからデータを取得する方法
Cloudflare保護ウェブサイトからのデータ抽出方法

このガイドでは、Cloudflareで保護されたウェブサイトからデータを抽出するための倫理的で効果的な手法を探ります。

Cloudflare
Logo of CapSolver

Sora Fujimoto

20-Feb-2025