受保护的站点

现代网站普遍采用先进的 Bot 检测技术。本指南介绍 FourA 如何在检测访问者身份的站点上获取页面,以及如何提高请求成功率。

Bot 检测的工作原理

网站通常采用多层防护:

  • IP 信誉:数据中心和已知 proxy 地址会被拦截
  • 网络指纹:每个 HTTP 客户端都有独特的握手特征,站点可据此进行检测
  • 浏览器指纹:JavaScript 检测 headless 浏览器特征
  • 行为分析:请求模式、时间间隔和导航路径
  • 验证页面:需要访问者完成的可视化任务

响应中会标明执行检测的系统;详见 站点检测列表。

最快路径:Auto

如果尚不清楚防护级别,调用 /api/auto/ 并传入仅真实页面包含的 validate.data.accept 子字符串。Auto 会按成本递增的阶梯策略尝试(先轮换 proxy,再通过 proxy 使用浏览器;使用 forceProxy: false 时,会先尝试低成本的直连探测和直连浏览器渲染),并在第一个满足规则的响应处停止。对于针对同一主机的重复调用,系统会复用预热会话,从而降低后续调用的成本。

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/)发出的握手特征与真实浏览器一致。目标站点会像响应真实浏览器一样对其做出响应,且无需承担运行浏览器的开销。

启用 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 之间轮换。如果一个 IP 被封禁,下一次尝试将使用其他 IP。在后续调用中使用 ignoreProxies 可跳过已失效的出口;使用 maxTries (默认 5,最大 90) 控制重试强度。

指定国家出口

在 /api/proxy/ 上传递 exitCountries,以将选择范围限制在对目标可见国家符合严格白名单的 proxy。取值为两位字母代码 (["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。在信任 payload 之前,请先验证它属于您的 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>"
  }
}

由此得出两条规则:

  1. solved: false 表示 body 可能是质询内容而非页面。 FourA 从不将质询页面作为内容呈现,因此在解析前请检查该标志。
  2. 完成验证后即可获得通行凭证。 当存在 defense.cookie 时,在具有相同 User-Agent 的同一出口上将其作为 Cookie header 发回,后续 request 将完全跳过检查。

FourA 支持识别常见的检查系统,包括 eBay、Reddit、Amazon 和 Google Search 的第一方检查。识别的范围大于绕过:能够命名但无法绕过的系统会被报告,且绝不会增加 request 成本。当返回的页面是该系统的检查页面时,即使状态码为 HTTP 200,request 也不会计费,并通过 X-FourA-Check-Page header 标明系统名称。有关各字段详情、当前绕过与检测的区分以及重放示例,请参阅 站点检查。

按防护级别划分的策略

未知防护

使用 auto。它会优先进行低成本探测,并仅在目标强制要求时进行升级,因此每个 host 仅需支付一次探测成本。

低防护(大多数站点)

使用带有 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}'

高:行为与指纹检查

使用具有多次重试尝试的 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。“受保护页面:优先使用代理,需要 JavaScript 时使用浏览器”配方展示了确切的“先代理后浏览器”切换流程。

最佳实践

  1. 对于未知目标,优先使用 auto。 传入 validate 规则,让阶梯策略选择成本最低的层级,然后读取响应中的 meta.rung 以查看生效的引擎。明确引擎后,后续重复流量可直接调用该引擎。

  2. 复用成功的会话。 在 auto 调用后,返回的 session(代理 ID + cookies + userAgent)可通过 /api/single/ 或 /api/browser/ 重放,用于请求同一主机上的后续页面,并按该 endpoint 自身的价格计费:使用 unblocker 的 Single 消耗 2 积分,Browser 消耗 5 积分(交互式页面消耗 10 积分)。

  3. 遵守速率限制。 即使使用了代理轮换,向单个站点每秒发送数百个 request 也会触发行为检测。请将 request 间隔至少保持在 1 到 2 秒。

  4. 保持 unblocker 开启。 在 Single 和 Proxy 上,unblocker: true(默认值)会发送逼真的浏览器签名和 headers。在 Browser 上,它会启用质询求解器。仅在明确需要原生客户端签名或原始质询页面时才将其关闭。

  5. 监控成功率。 查看 Dashboard 指标以跟踪不同时期的成功率。成功率骤降通常意味着目标站点更新了防护策略。

  6. 跳过失效出口。 如果 /api/proxy/ 或 /api/auto/ 调用返回的代理 ID 随后开始失败,请在下次调用时将其传入 ignoreProxies,以便 FourA 选择其他出口。

  7. 重试前读取 defense。 供应商名称会提示你是否值得尝试不同的浏览器配置文件、是否需要完整渲染,或者该检查是否属于必须通过求解服务才能通过的类型。

  8. 更换模拟的浏览器。 某些目标站点允许特定浏览器而拒绝其他浏览器。在 Single 和 Proxy 上设置 browser、os 或 version,并读取 GET /api/profiles 获取当前目录。详情请参阅 endpoint 参考。

限制

某些场景需要在 API 之外进行额外处理:

  • 受登录保护的内容:FourA 不会为您管理长期登录会话。浏览器 endpoint 支持在每个 request 中传入 cookies;请自行携带您的 session cookie。
  • 交互式验证任务:FourA 可以识别可视化验证并在 defense.present 中报告,但不会自动完成它们。Turnstile 由 Browser 处理。
  • 限制特定国家/地区访问的内容:在 /api/proxy/ 上使用 exitCountries 将选择范围固定到允许的国家/地区。对于额外限制 ISP 或 ASN 的网站(例如某些获得特定国家牌照的博彩公司、特定政府服务),可能仍会拦截常规住宅出口;当当前池中没有匹配的出口时,request 将返回 no_eligible_proxy。
  • 存在法律限制的网站:请始终确保您的数据收集行为符合目标网站的服务条款及适用法律。

后续步骤

更新于: 2026年9月27日