ハイライト
サーバーが1台停止しても、次のrequestは別のサーバーにルーティングされます。API、proxyポート、MCPサーバー、サインイン、Webサイトがスタンバイサーバーでも稼働するようになり、トラフィックは自動で移行します。また、rate limitの仕様を変更し、一時的な超過で全体が制限されないようにしました。上限までは通常通り処理され、超過分のみが拒否されます。
新機能
全エンドポイントにスタンバイサーバーを配置
メインサーバーが応答しなくなった場合、クライアント側の設定変更なしでトラフィックがスタンバイサーバーに移行します。同一のキー、ホスト、proxyユーザーをそのまま利用できます。
現在処理できないサーバーに届いたrequestは、エラーを返さずに処理可能なサーバーへ転送されます。この切り替え処理中も、稼働中のサーバーにおける呼び出し速度は低下しません。
Rate limitの超過分のみを遮断
SingleまたはProxy Finderでプランの1分間あたりの制限値をわずかに超えた場合でも、制限値内のrequestは処理され、超過分のみが拒否されます。拒否されたrequestは分間カウントに含まれなくなりました。次のrequestが許可されるタイミングはRetry-Afterで示されます。
短時間に過度なリトライを行うと一時停止状態になります。1分間の拒否回数が上限値の2倍を超えると、cooldown: trueが付与されて30秒の待機状態に入ります。この待機中の拒否はカウントされないため、クライアントがリクエストを送り続けていても自動的に解除されます。新しいproxyポートへの接続も同様のルールが適用され、トンネルが確立されなかった接続は分間カウントに含まれません。
import time
import requests
def single(url, key, tries=5):
for _ in range(tries):
r = requests.post(
"https://api.foura.ai/api/single",
headers={"X-API-Key": key},
json={"url": url},
)
if r.headers.get("X-FourA-Limit") != "plan_limit_rate":
return r
# same header on the 30-second pause; the body adds "cooldown": true
time.sleep(int(r.headers.get("Retry-After", "1")))
return r
各フィールドの詳細はレート制限ページに記載されています。
Autoが全アクセスを拒否するサイトでより早く処理を中断
Browserを含む、Autoが試行したすべての出口ノードをサイトがブロックした場合、設定された予算を使い切るまで試行し続けるのではなく、数回試行した時点で呼び出しを終了するようになりました。Proxy Finderが過去に処理したことのあるサイトでは、Autoはまず独自のvalidateルールに従ってProxy Finderにページを要求します。該当する結果がない場合、この検索にコストはかかりません。
さらに2つの変更により、Autoは指定された制限内に収まるよう動作します。混雑しているセッションや、同一サイトで処理中の別リクエストを待機している呼び出しは、指定のtimeout_ms内でtime budget exhaustedエラーとして終了するようになりました。これにより、リトライするか予算を引き上げることができます(詳細は一般的な問題を参照してください)。また、JSONページはどのルートで取得された場合でもdataにテキストとして返されるため、単一のパーサーですべての呼び出しを処理できます。
これらの変更によってAutoの用途が変わることはありません。Autoは最適なルートを検出するための機能です。ルートが特定できたら、返されたsessionを/api/singleまたは/api/browserで再実行し、トラフィックをそちらに向けてください。
追加ステップが必要なページへの対応
Browserは、スクリプトを実行した後に実際のリッチコンテンツへとリロードするタイプの待機ページにも対応し、遷移先のページを返すようになりました。Autoは同一の出口ノード上でそのようなページをBrowserに引き渡すため、最終的なサイトコンテンツを取得して呼び出しを終了します。
一部のAmazon商品ページでは、最初に「ショッピングを続ける」のクリックを求められます。SingleおよびBrowserは、同一の出口ノード上でそのボタンを押下し、商品ページを返すようになりました。Proxy FinderおよびAuto経由の呼び出しでも同様に動作します。
また、Browserはページの読み込み後に別アドレスへリダイレクトされる場合、タイムアウトを待たずに追従するようになりました。送信された__Secure-または__Host-という名前のCookieには、プレフィックスが要求する属性が付与されるため、ページ側で保存されたセッション全体が正しく認識されます。
Proxy Finderと2つの明確化されたエラー
Proxy Finder経由のプレーンHTTPリクエストは、HTTPSと同様に、まずサイトへの直接接続を確立するようになりました。独自のエラーページを返すプロキシや、無関係なサイトに対して同一のレスポンスボディを返すプロキシはスキップされ、リクエストは次のプロキシへと進みます。
名前解決できないホスト名を含む独自のプロキシURLをSingleまたはBrowserに渡すと、ターゲットの場合と同様に、ホスト名を明記したエラーとともにstatus 0が返されます。api.foura.aiまたはeu.api.foura.ai自体をターゲットにしたリクエストは、データ取得や課金が発生する前に即座に400エラーとなります。このエラーは、リンクが元のページではなくAPI URLを基準に解決されているという一般的な原因を示します。
ダッシュボード、サインアップ、および請求
- foura.ai で開始したサインアップは Dashboard で完了するようになり、Overview で最初のリクエスト結果までの手順が案内されます。API キーを作成し、ターミナルまたは Playground からリクエストを送信します。スマートフォンでは Playground から手順が開始され、proxy ポートには proxy ユーザー用の専用ステップが用意されています。
- スマートフォンや狭いウィンドウでは、レスポンスが届くと同時に Playground がその位置まで自動スクロールします。
- Usage by Domain および Usage by Client IP では、ページ分割前に期間内の全行をランク付けするため、1ページ目に実際のトップエントリが確実に表示されます。
- Overview カードは読み込み中であっても選択した期間に追従し、期間ダイアログは現在表示中の設定で開き、サイドバーの Tools 配下に Docs リンクが追加されました。
- 手動発行のインボイスが、自動発行分と並んで Billing ページ に表示されるようになりました。EU VAT 対象のインボイスには、事前告知済みの変更を含め、販売当日に有効な税率が適用されます。
これらに関する詳細は updates.foura.ai に個別のエントリがあります。
Under the Hood
proxy ポートはオープンなトンネル数をリアルタイムでカウントしており、インスタンスの再起動によって終了したトンネルは数秒以内にカウントから除外されます。そのため、プランで許可された同時接続数を過不足なく利用できます。
最高のフェイルオーバーとは、ダイジェストで事後報告を受けるまで気付かないような仕組みのことです。