跨请求重用代理

了解如何在后续请求中保持相同的代理出口,以便 JavaScript 渲染、API 调用和分页获取都从同一个 IP 发出。

为何重用代理

首次访问目标时,FourA 会为您选择一个可用的代理。每个响应都会包含所使用的代理 ID。在后续请求中传回该 ID,即可:

  • 后续页面通过相同出口访问,使会话 cookie 和速率限制对目标保持一致。
  • 限定国家/地区的获取操作保持在您的允许列表内,无需重新选择。
  • 廉价的 POST /api/single/ 端点通过您已付费发现的代理重放,按 Single 成本而非 Proxy 成本计费。

代理 ID 是不透明的 base36 字符串(类似 A1B2C3)。绝不是原始 IP。

ID 在响应中的位置

端点 字段 存在条件
POST /api/auto/ session.proxy returnSessiontrue 时(默认值)
POST /api/single/ proxy(顶层) 仅当请求提供 proxy 字段时
POST /api/proxy/ proxy(顶层) 成功时始终存在
POST /api/browser/ proxy(顶层) 仅当请求提供 proxy 字段时

要获取新的出口而不固定,请从 Auto 或 Proxy 开始。两者都会发现可用的出口并为您返回其 ID。

模式 1:Auto 发现,Single 重放

最适合您尚不了解的目标。Auto 执行一次阶梯请求,然后 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 调用的费用取决于其 ladder 的消耗。每次后续的 Single 调用消耗 2 个 credit (带有 unblocker 的 Single,这是默认设置)。

模式 2:Proxy 发现,Browser 通过相同出口渲染

当目标必须看到特定的出口国家,且最终内容需要 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 接受来自早期响应的 proxy ID 列表。它适用于 /api/proxy//api/auto/。该列表在每次内部重试时都会被采用,因此具有 ignoreProxies 的单个调用绝不会选择已失效的出口。

固定会话的存活时间

只要底层 proxy 运行健康,出口就会一直存在,通常为几分钟到几小时。如果重放开始返回质询、拦截或意外重定向,则该出口可能已被轮换,或者目标刷新了其许可。

发生这种情况时有两个选项:

  1. 针对同一 URL 的全新 /api/auto/ 调用。Auto 将发现新的工作会话;请丢弃之前的 ID。
  2. 如果您想继续手动固定,请使用 ignoreProxies: ["<burned-id>"] 发起全新的 /api/proxy/ 调用。

Auto 响应中的会话 cookie 也会根据目标自身的计划过期。某些网站将许可绑定数小时;其他网站则只有几分钟。请将会话视为缓存,而不是持久化的 token。

常见错误

  • 跨账户重用 proxy ID。 Proxy ID 是基于单个响应的标识符。将 ID 从一个 API 密钥传递到另一个 API 密钥无法保证解析为同一出口。
  • 尝试解码 ID。 base36 字符串是不透明的。不要解析它,不要剥离字符,不要将其转为小写。请原样传递回去。
  • 通过受 rate limit 限制的出口进行固定。 如果目标按 IP 进行 rate limit,将许多 request 集中通过一个出口会更快触发拦截。对于高吞吐量的工作负载,请让 Auto 或 Proxy 在许多出口中轮换,仅在目标真正需要时才固定。
  • 在后续调用中忽略 exitCountries 如果您固定了一个限定范围的出口,然后在没有 exitCountries 的情况下再次调用 Proxy,后续请求可能会从不同的国家/地区发出。请在每个需要的调用中保留该范围。

相关内容

更新于: 2026年8月1日