アンチボット対策

ターゲットが要求されたページへの途中でボットチェックを実行した場合、FourAはそれを通知します。チェックに遭遇したすべてのリクエストは、システム名、チェックがクリアされたかどうか、そして(クリアされた場合)次の呼び出しでスキップするために再利用できるクリアランス情報をフィールドで返します。

このページはこれらのフィールドのリファレンスです。戦略については、Handling Anti-Bot Protectionを参照してください。

フィールドの場所

エンドポイント フィールド 存在条件
POST /api/single/ defense (object) レスポンスでボットチェックが認識された場合
POST /api/proxy/ defense (object) 同上、応答した試行によって報告された場合
POST /api/browser/ defenseSolved (boolean) および defenses (object) ページロード中にボットチェックが認識された場合
POST /api/auto/ meta.solved (boolean) 常に存在。階層のどこかでチェックがクリアされた場合は true

存在しない場合は、何も認識されなかったことを意味します。defense の欠落を失敗と見なさないでください。

レポートには unblocker が必要ですが、これはデフォルトで有効になっています。unblocker: false を指定した場合、送られてきたままのページを要求したことになるため、Single はチャレンジをそのまま返し、Browser は解決せずにレンダリングします。

Single および Proxy での defense

{
  "status": 200,
  "data": "<!doctype html>...",
  "total_time": 3.61,
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "ms": 3412,
    "hashes": 1048576,
    "complexity": 20,
    "cookie": "_I_=<clearance>"
  }
}
フィールド 説明
vendor string このレコードが対象とするシステム (クリアされたもの、または遭遇した主要なもの)。以下のベンダーリストを参照。
solved boolean true はチェックがクリアされ、data が実際のページであることを意味する。falsedata がチャレンジページである可能性があることを意味する。
present string[] このレスポンスで認識されたすべてのシステム。vendor よりも多くの名前を含むことができ、まだクリアできない名前を含むこともできる。
ms number チェックのクリアに要したミリ秒数。クリア時のみ。
hashes number チャレンジが要求した計算作業量。クリア時のみ。
complexity number チャレンジが宣言した難易度。クリア時かつチャレンジが報告する場合のみ。
answers number 複数の回答を求めるチャレンジに対して提供された、承認済み回答の数。クリア時のみ。
cookie string 獲得した再利用可能なクリアランス。クリア時のみ。

solved: false は分岐処理を行うべきケースである。FourA が未解決のチャレンジをコンテンツとして提示することはないため、このフラグは body のパースではなくエスカレーションが必要であることを示すシグナルとなる。

Browser における defenses

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
フィールド 説明
defenseSolved boolean 読み込み中にシステムに遭遇し、最終ページでそのクリアランスが保持されている場合にtrueになります。これは、呼び出しコストが15クレジットか30クレジットかを決定するフラグです。
defenses.present string[] 最終的なレスポンスだけでなく、ページ読み込み中の任意の時点で認識されたすべてのシステムです。チェックはすでに発生した事象であり、実際のページが到着する頃にはチャレンジのレスポンスは消え去っています。
defenses.cleared string[] 最終ページがクリアランスを保持しているシステムです。

clearedに到達しないpresentの名前は、FourAが認識できてもまだ通過できないシステムです。これらによって呼び出しの価格が上がることはありません。

ベンダー

vendor の値 システム
cloudflare Cloudflareのチャレンジおよびボット管理
sgcaptcha SiteGroundのサイトチェック
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf AWS WAFチャレンジ
ebay-splashui eBay独自のチャレンジ
hcaptcha hCaptcha
recaptcha reCAPTCHA

現在クリアされるもの

Endpoint クリア対象
Single, Proxy sgcaptcha, ebay-splashui. どちらも視覚的ではなく計算的なものであるため、ブラウザは関与しません。
Browser cloudflare, sgcaptcha

リスト上の他のすべては認識および報告されるだけであり、それ以上のことはありません。FourAがより多くのシステムをクリアできるように学習するにつれてこの境界は移動するため、この表から推測するのではなくsolvedを読んでください。

エッジケースに関する2つの注意点:

  • hcaptchaおよびrecaptchaも通常のフォームウィジェットです。レスポンスが実際にブロックした(403、429、または503)場合にのみ報告されるため、フォームにCAPTCHAフィールドがあるチェックアウトページでは防御として報告されません。
  • Cloudflareの背後にあることは防御ではありません。サイトがCloudflareを使用しているからではなく、レスポンスに実際のチャレンジやボット管理のアーティファクトが存在する場合にcloudflareが表示されます。

クリアランスのリプレイ

defense.cookieがこのフィールドの最大の目的です。クリアランスはそれを獲得した出口とそれを獲得したUser-Agentに紐付くため、同じペアを通してリプレイすればチェックは再び実行されません。

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
    "maxTries": 5,
    "request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()

defense = first.get("defense", {})
if defense.get("solved"):
    clearance = defense["cookie"]
    exit_id = first["proxy"]

    # 2) Follow-up pages skip the check: same exit, same clearance.
    for page in range(2, 6):
        r = requests.post(f"{API}/api/single/", headers=H, json={
            "method": "GET",
            "url": f"https://example.com/catalog?page={page}",
            "proxy": exit_id,
            "headers": [["Cookie", clearance]],
        }).json()
        print(page, r["status"])

最初のリクエストにはクリアのコストがかかります。以降のリプレイは通常の価格での通常のリクエストとなります。

リプレイが失敗する原因として次の3つがあります:

  1. 異なる出口(exit)。 クリア時のレスポンスが返したproxy IDを固定します。次を参照してください: リクエスト間でのproxyの再利用
  2. 異なるUser-Agent。 Browserのレスポンスは使用したuserAgentを返します。cookieと一緒にこれを送り返してください。
  3. 有効期限。 クリアランスにはターゲットによって設定された独自の有効期限があります。SiteGroundの場合はサイト全体で約30日ですが、Cloudflareのクリアランスは通常はるかに短くなります。クリアランスはキャッシュとして扱ってください。リプレイが再びチャレンジを返し始めたら、新規のリクエストを1回実行して新しいクリアランスを取得します。

コストについて

クリアされたチェックにより価格が変更されるのはBrowserのみです:

Engine Base Cleared defense
Single 1 (unblocker 付きで2) 変更なし
Proxy 5 (unblocker 付きで10) 変更なし
Browser 15 30

Browserが30を課金するのは、ソルバーがオンでシステムが実際にクリアされた場合のみです。システムが認識されたもののクリアされなかった場合のコストは15であり、チェックが全くないページと同じです。

組み合わせて使用する: validate

defenseはチェックに遭遇したことを通知します。validateは実際のページがどのようなものかをFourAに伝えます。これにより、たまたまHTTP 200を返すインタースティシャルページを渡すのではなく、リクエストを失敗させることができます。

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

POST /api/auto/において、ラダーがチャレンジページを受け入れて処理を完了とみなすのを防ぐ役割をvalidateが担います。

関連情報

最終更新日: 2026年8月12日