保護対象サイト
現代のWebサイトは高度なbot検出を使用しています。このガイドでは、リクエスト元を検証するサイトからFourAがページを取得する仕組みと、成功率を高める方法について説明します。
bot検出の仕組み
Webサイトは複数の保護レイヤーを使用しています。
- IPレピュテーション: データセンターや既知のproxyアドレスがブロックされます
- 通信フィンガープリント: 各HTTPクライアントには、サイト側で検出可能な固有のハンドシェイク署名があります
- ブラウザフィンガープリント: JavaScriptがheadlessブラウザの痕跡をチェックします
- 行動分析: リクエストパターン、タイミング、ナビゲーションフロー
- 検証ページ: 訪問者が完了する必要がある視覚的なタスク
レスポンスにはチェックを実行したシステム名が含まれます。詳細はサイトチェックに記載されています。
最短ルート: Auto
保護レベルが不明な場合は、実際のページにのみ含まれるvalidate.data.accept部分文字列を指定して/api/auto/を呼び出します。Autoはコストを考慮したラダー(ローテーションproxy、次にproxy経由のブラウザ。forceProxy: falseを使用する場合は、低コストな直接プローブと直接ブラウザレンダリングが先に実行されます)を順に試行し、ルールに合致するレスポンスを返した最初の段階で停止します。同一ホストへの再度の呼び出しではウォームセッションが再利用されるため、2回目以降のアクセスは低コストになります。
curl -X POST https://eu.api.foura.ai/api/auto/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://protected-site.com/product/42",
"validate": {"data": {"accept": ["Add to cart"]}}
}'
Auto は一般的なチャレンジページを認識し、遭遇時も処理を継続します。カスタムの validate.data.accept 文字列はそれ以外を捕捉します。未対応のチェックページ、ログインウォール、または必要なコンテンツが含まれていないページなどが対象です。詳細な手順については Smart Fetch ガイド を参照してください。
各レイヤーにおける FourA の機能
現実的なワイヤーレベルの request
単一の endpoint (POST /api/single/) は、実際のブラウザと一致するハンドシェイク特性を出力します。サイトはブラウザを実行するオーバーヘッドなしに、ブラウザに対するものと同じように response を返します。
unblocker を有効にすると、現実的なブラウザ header (User-Agent、Sec-Ch-Ua、Sec-Fetch-*、Accept-Encoding) も挿入されます。unblocker はデフォルトで有効です。プレーンなクライアント署名を送信する場合のみ false を設定してください。
{
"method": "GET",
"url": "https://protected-site.com/data",
"unblocker": true
}
実ブラウザによるレンダリング
ブラウザendpoint(POST /api/browser/)は完全なChromeブラウザインスタンスを実行します。実際の訪問者のブラウザと同様にページのJavaScriptを実行します。Browserでのunblockerは、ページ読み込み前に要求される検証(Turnstileなどの各種ゲート)を完了します。チャレンジページをそのまま取得したい場合を除き、有効のままにしてください。
Proxyローテーション
proxy endpoint(POST /api/proxy/)は、レジデンシャルおよびデータセンターproxyを自動的にローテーションします。1つのIPがブロックされた場合、次の試行では別のIPが使用されます。後続の呼び出しでignoreProxiesを使用してすでにブロックされたexitをスキップし、maxTries(デフォルト: 5、最大: 90)を使用して試行回数を制御します。
国単位のExit指定
/api/proxy/でexitCountriesを渡すと、ターゲットから認識される国が厳格な許可リストに一致するproxyのみに選択を制限できます。値は2文字のコード(["CZ", "GB"])で指定し、トリミング、大文字化、および重複排除が行われます。FourAが要求されていない国へフォールバックすることはありません。現在のプールに一致するものがない場合、responseはcode: "no_eligible_proxy"を返し、details.exitCountriesに正規化されたスコープが含まれるため、要件を緩和することなく後で再試行できます。国指定はStartupプラン以上で利用可能です。対象外のプランでexitCountriesを送信した呼び出しは、403およびX-FourA-Limit: plan_limit_featureで拒絶されます。
curl -X POST https://eu.api.foura.ai/api/proxy/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"maxTries": 5,
"exitCountries": ["CZ", "GB"],
"request": {"method": "GET", "url": "https://target.example/pricing"}
}'
スコープ指定が要求された場合、responseにはexitCountryが含まれます。ペイロードを信頼する前にそれがallowlistに属していることを確認し、後続のBrowser呼び出しで返されたproxy IDを再利用して、同じイグジット経由でJavaScriptのレンダリングが実行されるようにします。
FourAがブロック理由を特定
どのシステムがrequestをブロックしたかを推測する必要はありません。ターゲットがbotチェックを実行すると、responseにその名前が明記されます。
POST /api/single/およびPOST /api/proxy/はdefenseオブジェクトを返します。defense.vendorはシステム、defense.solvedはチェックがクリアされたかどうかを示し、defense.presentはそのresponseで認識されたすべての項目を一覧表示します。POST /api/browser/はdefenseSolvedに加えてdefenses.presentおよびdefenses.clearedを返します。
{
"status": 200,
"data": "<!doctype html>...",
"defense": {
"vendor": "sgcaptcha",
"solved": true,
"present": ["sgcaptcha"],
"cookie": "_I_=<clearance>"
}
}
これには2つのルールがあります:
solved: falseは、bodyがページ本体ではなくチャレンジである可能性があることを意味します。 FourAがチャレンジページをコンテンツとして扱うことはないため、パース前にフラグを確認してください。- 解決によりクリアランスが付与されます。
defense.cookieが存在する場合、同じイグジットかつ同じ User-Agent でCookieヘッダーとして返送することで、以降のリクエストはチェックを完全にスキップします。
FourAは、eBay、Reddit、Amazon、Google Searchの独自チェックを含む一般的なチェックシステムを認識します。認識できる範囲はクリアできる範囲よりも広範です。名前を特定できてもクリアできないシステムはレポートされ、リクエストのコストが上がることはありません。返されたページがそのシステムのチェックページである場合、HTTP 200であってもリクエストは課金されず、X-FourA-Check-Page ヘッダーにその名前が記録されます。各フィールド、現在のクリアと検知の対応状況、およびリプレイの例については サイトチェック を参照してください。
保護レベル別の戦略
不明な保護
auto を使用してください。最初は低コストでプローブし、ターゲットが必要とする場合にのみ段階的に引き上げるため、検出コストの支払いはホストごとに1回のみで済みます。
低レベルの保護 (大半のサイト)
unblocker を指定した単一の endpoint を使用します。ワイヤーレベルの一致で十分です。
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method": "GET", "url": "https://news-site.com/article", "unblocker": true}'
中:チャレンジページまたは基本的なファイアウォール
ブラウザ endpoint を使用して JavaScript チャレンジを通過します。
curl -X POST https://eu.api.foura.ai/api/browser/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://protected-site.com/data", "timeout_ms": 15000}'
High: 行動およびフィンガープリントのチェック
複数回のリトライを有効にして proxy endpoint を使用します:
curl -X POST https://eu.api.foura.ai/api/proxy/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"maxTries": 10,
"request": {
"method": "GET",
"url": "https://heavily-protected.com/prices",
"unblocker": true
}
}'
チャレンジ通過後のレンダリング済みページが必要となる、連鎖的なチャレンジページ(「Just a moment」などのセキュリティチェックポイント)については、MCP Recipesを参照してください。「Protected page: proxy first, browser when JavaScript is needed」レシピに、proxyからbrowserへの正確なハンドオフ手順が記載されています。
Best Practices
未知のターゲットにはautoから開始する。
validateルールを渡し、ラダーに最も低コストな手段を選択させた後、レスポンスのmeta.rungを確認して機能したエンジンを特定します。判明後は、以降のトラフィックでそのエンジンを直接呼び出します。成功したセッションを再利用する。 auto呼び出しの後、返された
session(proxy ID + cookies + userAgent)を/api/single/または/api/browser/経由で再利用し、同一ホストの後続ページを取得できます。コストは各endpointの価格に準じます(Singleでunblockerを使用した場合は2クレジット、Browserでは5クレジット、インタラクティブページは10クレジット)。レート制限を遵守する。 proxyローテーションを使用している場合でも、単一サイトに対して毎秒数百件のrequestを送信すると動作検知の対象となります。requestの間隔は最低1から2秒空けてください。
unblockerを有効のままにする。 SingleおよびProxyでは、unblocker: true(デフォルト)により現実的なブラウザシグネチャとheaderが送信されます。Browserではチャレンジソルバーが有効になります。プレーンなクライアントシグネチャまたは生のチャレンジページが明示的に必要な場合を除き、無効にしないでください。成功率を監視する。 Dashboardのメトリクスを確認し、経時的な成功率を追跡してください。急激な低下は、通常ターゲットサイトが保護対策を更新したことを意味します。
無効化された出口をスキップする。
/api/proxy/または/api/auto/の呼び出しで返されたproxy IDが失敗し始めた場合は、次の呼び出しでignoreProxiesにそれを渡し、FourAに別の出口を選択させます。再試行前に
defenseを確認する。 ベンダー名を確認することで、別のブラウザプロファイルを試す価値があるか、フルレンダリングが必要か、あるいは解決サービスなしでは通過できないチェックであるかを判断できます。提示するブラウザを変更する。 ターゲットによっては特定のブラウザを受け入れ、別のブラウザを拒否する場合があります。SingleおよびProxyで
browser、os、またはversionを設定し、利用可能な一覧についてはGET /api/profilesを確認してください。詳細はendpoint referenceに記載されています。
Limits
一部のシナリオでは、API外部での追加処理が必要です。
- ログイン保護されたコンテンツ: FourAは長期間のログインセッションを管理しません。ブラウザendpointはリクエストごとに
cookiesを受け付けます。セッションcookieはご自身で渡してください。 - インタラクティブな検証タスク: FourAは視覚的な検証を認識して
defense.presentで報告しますが、それらを自動完了することはありません。TurnstileはBrowserによって処理されます。 - 特定国に制限されたコンテンツ: 許可された国に選択を固定するには、
/api/proxy/でexitCountriesを使用します。ISPやASNでも制限しているサイト(一部の国営ブックメーカーや特定の政府系サービスなど)は、一般的なレジデンシャル出口をブロックする場合があります。現在のプールに一致する出口がない場合、リクエストはno_eligible_proxyを返します。 - 法的制限のあるサイト: データ収集が対象サイトの利用規約および適用法に準拠していることを常に確認してください。
次のステップ
- スマートフェッチ (Auto):
/api/auto/の詳細解説 - 適切なendpointの選択: endpoint選定ガイド
- 一般的な問題: 403エラーおよび検証ページの修正
- API Endpoints:
exitCountriesを含む完全なパラメータリファレンス - サイトチェック:
defenseフィールド、システム一覧、クリアランスリプレイ - MCPレシピ: proxy先行ブラウザフォールバックチェーンを含むワークフローテンプレート