处理反爬虫保护
现代网站使用高级反机器人检测。本指南说明 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.present和defenses.cleared。
{
"status": 200,
"data": "<!doctype html>...",
"defense": {
"vendor": "sgcaptcha",
"solved": true,
"present": ["sgcaptcha"],
"cookie": "_I_=<clearance>"
}
}
由此得出两条规则:
solved: false表示正文可能是 challenge 而非页面。 FourA 从不将未解决的 challenge 伪装成内容,因此请在解析前检查该标志。- 解决后即可获得通行许可。 当
defense.cookie存在时,将其作为Cookieheader 通过相同的出口及相同的 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 切换过程。
最佳实践
对于未知目标,请从 auto 开始。 传递
validate规则,让阶梯选择最便宜的层级,然后读取 response 中的meta.rung以查看哪个引擎生效。一旦确认,直接调用该引擎以处理重复流量。复用成功的会话。 在 auto 调用后,返回的
session(proxy ID + cookies + User-Agent) 可以通过/api/single/或/api/browser/在同一主机上的后续页面重放,按 Single 的价格计费。遵守 rate limit。 即使使用了 proxy 轮换,每秒向单个站点发送数百个 request 也会触发行为检测。请将你的 request 间隔至少 1 到 2 秒。
保持
unblocker开启。 对于 Single, Proxy 和 Browser request,unblocker: true(默认值)会自动注入真实的 browser header。仅当你明确需要普通的 client 签名或原始质询页面时才将其关闭。监控成功率。 检查 Dashboard 指标以跟踪你的成功率随时间的变化。突然下降通常意味着目标站点更新了其保护。
跳过失效的出口。 如果
/api/proxy/或/api/auto/调用返回了一个随后开始失败的 proxy ID,请在下一次调用中的ignoreProxies传递它,以便 FourA 选择不同的出口。重试前读取
defense。 供应商名称会告诉你是否值得尝试不同的 browser profile,是否需要完整渲染,或者该检查是否需要解决服务才能通过。更改你提供的 browser。 某些目标接受一种 browser 而拒绝另一种。在 Single 和 Proxy 上设置
browser,os或version,并读取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。 - 具有法律限制的站点:请始终确保您的数据收集符合目标站点的服务条款和适用法律。
下一步
- Smart Fetch (Auto):深入了解
/api/auto/ - 选择合适的 Endpoint:Endpoint 决策指南
- 常见问题:修复 403 错误和 CAPTCHA 封锁
- API Endpoints:包含
exitCountries的完整参数参考 - 反机器人防御:
defense字段、供应商列表和 clearance 重放 - MCP 方案:包含先 proxy 后 browser 链的工作流模板