处理反爬虫保护

现代网站使用高级反机器人检测。本指南说明 FourA 如何处理反机器人系统以及如何最大化您的成功率。

机器人检测如何工作

网站使用多层保护:

  • IP 声誉:数据中心和已知的 proxy 地址会被阻止
  • 网络层指纹:每个 HTTP 客户端都有一个独特的握手签名,网站可以检测到该签名
  • 浏览器指纹:JavaScript 会检查 headless 浏览器指标
  • 行为分析:请求模式、时间安排和导航流程
  • CAPTCHA:作为最后一道防线的视觉挑战

常见的反机器人提供商包括 Cloudflare、DataDome、PerimeterX 和 Akamai Bot Manager。

最快路径:Auto

如果您尚不清楚保护级别,请调用 /api/auto/ 并附带一个仅真实页面包含的 validate.data.accept 子字符串。Auto 会执行成本感知阶梯(廉价探测、轮换 proxy、浏览器渲染、通过 proxy 的浏览器),并在返回您的规则所接受的 response 的第一阶停止。在对同一主机的重复调用中,会重放预热的会话,因此第二次请求的成本很低。

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"]}}
  }'

如果没有 validate.data.accept,auto 无法区分真实的 200 响应和以状态码 200 返回的质询插页,并可能将质询作为成功结果返回。有关完整演练,请参阅 Smart Fetch 指南

FourA 如何在各层提供帮助

真实的 Wire-Level 请求

单一 endpoint (POST /api/single/) 会发出与真实浏览器匹配的握手特征。这能通过最常见的 wire-level 检查,而无需承担运行完整浏览器的开销。

启用 unblocker 还可以注入逼真的浏览器 header (User-Agent, Sec-Ch-Ua, Sec-Fetch-*, Accept-Encoding)。unblocker 默认开启;仅设置 false 以发送纯客户端签名。

{
  "method": "GET",
  "url": "https://protected-site.com/data",
  "unblocker": true
}

真实浏览器渲染

browser 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 中提供标准化范围,以便你稍后重试而无需放宽要求。

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 之前,请验证它是否属于您的白名单,然后在任何后续 Browser 调用中重用返回的 proxy ID,以便 JavaScript 渲染通过同一个出口进行。

FourA 会告诉您拦截原因

您无需猜测哪个系统拦截了 request。当目标运行机器人检查时,response 会指明它。

  • POST /api/single/POST /api/proxy/ 返回一个 defense 对象: defense.vendor 是系统,defense.solved 表示是否通过了检查,defense.present 列出在该 response 上识别出的所有内容。
  • POST /api/browser/ 返回 defenseSolved 以及 defenses.presentdefenses.cleared
{
  "status": 200,
  "data": "<!doctype html>...",
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "cookie": "_I_=<clearance>"
  }
}

由此得出两条规则:

  1. solved: false 表示正文可能是 challenge 而非页面。 FourA 从不将未解决的 challenge 伪装成内容,因此请在解析前检查该标志。
  2. 解决后即可获得通行许可。defense.cookie 存在时,将其作为 Cookie header 通过相同的出口及相同的 User-Agent 发回,后续的 request 将完全跳过检查。

FourA 可识别 Cloudflare, SiteGround, DataDome, PerimeterX, Akamai, Incapsula, AWS WAF, hCaptcha, reCAPTCHA 以及 eBay 自身的 challenge。识别范围大于清除范围:对于能命名但无法清除的系统会进行报告,且不会改变 request 的成本。请参阅 Anti-Bot Defenses 了解每个字段、当前的清除与检测分类以及重放示例。

基于防护等级的策略

未知防护

使用 auto。它会优先进行低成本探测,仅在目标强制要求时才会升级,因此每个主机您只需支付一次发现费用。

低防护 (大多数网站)

使用带有 unblocker 的单一 endpoint。wire-level 的匹配就足够了。

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}'

中级防护 (Cloudflare, 基础 WAF)

使用浏览器 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}'

高级防护 (DataDome, PerimeterX)

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

对于链式 WAF 质询(Cloudflare "Just a moment", Vercel Security Checkpoint, Akamai Bot Manager),当你需要在质询清除后获取渲染页面时,请参阅 MCP Recipes。"Protected page: proxy first, browser when JavaScript is needed" 方案展示了确切的 proxy-then-browser 切换过程。

最佳实践

  1. 对于未知目标,请从 auto 开始。 传递 validate 规则,让阶梯选择最便宜的层级,然后读取 response 中的 meta.rung 以查看哪个引擎生效。一旦确认,直接调用该引擎以处理重复流量。

  2. 复用成功的会话。 在 auto 调用后,返回的 session (proxy ID + cookies + User-Agent) 可以通过 /api/single//api/browser/ 在同一主机上的后续页面重放,按 Single 的价格计费。

  3. 遵守 rate limit。 即使使用了 proxy 轮换,每秒向单个站点发送数百个 request 也会触发行为检测。请将你的 request 间隔至少 1 到 2 秒。

  4. 保持 unblocker 开启。 对于 Single, Proxy 和 Browser request,unblocker: true(默认值)会自动注入真实的 browser header。仅当你明确需要普通的 client 签名或原始质询页面时才将其关闭。

  5. 监控成功率。 检查 Dashboard 指标以跟踪你的成功率随时间的变化。突然下降通常意味着目标站点更新了其保护。

  6. 跳过失效的出口。 如果 /api/proxy//api/auto/ 调用返回了一个随后开始失败的 proxy ID,请在下一次调用中的 ignoreProxies 传递它,以便 FourA 选择不同的出口。

  7. 重试前读取 defense 供应商名称会告诉你是否值得尝试不同的 browser profile,是否需要完整渲染,或者该检查是否需要解决服务才能通过。

  8. 更改你提供的 browser。 某些目标接受一种 browser 而拒绝另一种。在 Single 和 Proxy 上设置 browser, osversion,并读取 GET /api/profiles 以获取当前目录。详细信息请见 endpoint reference

FourA 无法绕过的内容

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

  • 受登录保护的内容:FourA 不会为您管理长期登录状态。Browser endpoint 每次请求接受 cookies;请自行携带您的 session cookie。
  • 交互式 CAPTCHA:reCAPTCHA 和 hCaptcha 需要验证码解决服务。FourA 会识别两者并在 defense.present 中报告,但不会清除它们。Turnstile 由 Browser 处理。
  • 受地理位置限制的内容:在 /api/proxy/ 上使用 exitCountries 将选择固定在允许的国家/地区。额外根据 ISP 或 ASN 进行限制的站点 (某些受国家许可的博彩公司、特定的政府服务) 仍可能封锁通用的住宅出口;当当前池中没有匹配的出口时,请求会返回 no_eligible_proxy
  • 具有法律限制的站点:请始终确保您的数据收集符合目标站点的服务条款和适用法律。

下一步

更新于: 2026年8月12日