request間でproxyを再利用する

後続の request でも同じ proxy の出口を維持し、JavaScript のレンダリング、API 呼び出し、ページネーションされたフェッチがすべて同じ IP から行われるようにする方法を説明します。

なぜ proxy を再利用するのか

最初にターゲットにアクセスすると、FourA は機能する proxy を選択します。すべての response には使用した proxy の ID が含まれています。その ID を後続の request で渡すと、次のようになります。

  • 後続のページが同じ出口を通過するため、session cookie と rate limit がターゲットに対して一貫性を保ちます。
  • 国をスコープとしたフェッチが、新たに選択することなく allowlist 内に留まります。
  • 安価な POST /api/single/ endpoint は、発見のために支払い済みの proxy を経由して、Proxy のコストではなく Single のコストでリプレイします。

proxy ID は不透明な base36 文字列(A1B2C3 のようなもの)です。生の IP になることはありません。

response 内の ID の位置

Endpoint Field 存在する場合
POST /api/auto/ session.proxy returnSessiontrue の場合(デフォルト)
POST /api/single/ proxy (トップレベル) request に proxy フィールドが指定された場合のみ
POST /api/proxy/ proxy (トップレベル) 常に(成功時)
POST /api/browser/ proxy (トップレベル) request に proxy フィールドが指定された場合のみ

固定せずに新しい出口を取得するには、Auto または Proxy から始めます。どちらも機能する出口を検出し、その ID を返します。

パターン 1: Auto で検出し、Single でリプレイする

未知のターゲットがある場合に最適です。Auto がラダーを1回通過した後、Single がすべての後続ページで成功したセッションを再利用します。

import requests

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

# Step 1: discover a working exit with Auto.
r = requests.post(f"{API}/api/auto/", headers=H, json={
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
}).json()

session = r["session"]
proxy = session["proxy"]
user_agent = session["userAgent"]

# Step 2: paginate with Single, reusing the same exit and User-Agent.
for sku in ("43", "44", "45"):
    p = requests.post(f"{API}/api/single/", headers=H, json={
        "method": "GET",
        "url": f"https://example.com/product/{sku}",
        "proxy": proxy,
        "headers": [["User-Agent", user_agent]],
    }).json()
    print(sku, p["status"])

Autoコールのコストは、そのラダーの消費量に依存します。その後の各Singleコールのコストは2クレジットです(デフォルトであるunblockerを使用したSingle)。

パターン2: Proxyが検出し、ブラウザが同じ出口からレンダリングする

ターゲットに特定の出口国を認識させる必要があり、最終的なコンテンツにJavaScriptが必要な場合に使用します。

# Step 1: pick a country-scoped exit with Proxy.
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": ["FR", "GB"],
    "request": {"method": "GET", "url": "https://example.com/pricing"}
  }'
# Response includes: "proxy": "A1B2C3", "exitCountry": "FR"

# Step 2: render the JS-heavy page through THAT exit.
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://example.com/pricing",
    "proxy": "A1B2C3",
    "timeout_ms": 20000
  }'

選択を更新するために/api/proxy/を再呼び出ししないでください。新たに呼び出すと別の出口が選択される可能性があり、固定する意味がなくなります。固定した出口が機能しなくなった場合は、新たに/api/proxy/を呼び出して新しい出口を選択し、その出口で続行してください。

パターン3: ブロックされた出口をスキップする

以前機能していた出口がブロックやCAPTCHAを返し始めた場合は、次回の選択時にその出口を回避するようにFourAに指示してください。

{
  "maxTries": 5,
  "ignoreProxies": ["A1B2C3"],
  "request": { "method": "GET", "url": "https://example.com/data" }
}

ignoreProxiesは以前のresponseからのproxy IDのリストを受け入れます。これは/api/proxy//api/auto/で機能します。このリストはすべての内部リトライで尊重されるため、ignoreProxiesを使用した1回の呼び出しで、使用済みのexitが選択されることはありません。

固定されたセッションの有効期間

exit自体は、基盤となるproxyが正常である限り存続し、通常は数分から数時間です。リプレイがチャレンジ、ブロック、または予期しないリダイレクトを返し始めた場合、exitがローテーションされたか、ターゲットがクリアランスを更新した可能性があります。

これが発生した場合の2つのオプション:

  1. 同じURLに対する新しい/api/auto/の呼び出し。Autoは新しく機能するセッションを検出し、以前のIDを破棄します。
  2. 手動で固定を維持したい場合は、ignoreProxies: ["<burned-id>"]を使用した新しい/api/proxy/の呼び出し。

Autoのresponseからのセッションcookieも、ターゲット独自のスケジュールで期限切れになります。クリアランスを数時間バインドするサイトもあれば、数分とするサイトもあります。セッションは永続的なtokenではなく、キャッシュとして扱ってください。

よくある間違い

  • アカウント間でのproxy IDの再利用。 proxy IDはresponseごとの識別子です。あるAPIキーから別のキーへIDを渡しても、同じexitに解決されるとは限りません。
  • IDのデコードの試み。 base36文字列は不透明です。解析したり、文字を削除したり、小文字にしたりしないでください。そのまま返してください。
  • レート制限のあるexitを通じた固定。 ターゲットがIPごとにrate limitを行っている場合、1つのexitに多くのrequestを集中させると、ブロックが早くトリガーされます。大量のワークロードの場合は、AutoまたはProxyに多くのexitをローテーションさせ、ターゲットが本当に必要とする場合のみ固定してください。
  • 後続の呼び出しでのexitCountriesの無視。 スコープされたexitを固定し、exitCountriesなしで再度Proxyを呼び出すと、後続の呼び出しが異なる国を経由する可能性があります。それを必要とするすべての呼び出しでスコープを維持してください。

関連情報

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