受保护的站点
现代网站普遍采用先进的 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>"
}
}
由此得出两条规则:
solved: false表示 body 可能是质询内容而非页面。 FourA 从不将质询页面作为内容呈现,因此在解析前请检查该标志。- 完成验证后即可获得通行凭证。 当存在
defense.cookie时,在具有相同 User-Agent 的同一出口上将其作为Cookieheader 发回,后续 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 时使用浏览器”配方展示了确切的“先代理后浏览器”切换流程。
最佳实践
对于未知目标,优先使用 auto。 传入
validate规则,让阶梯策略选择成本最低的层级,然后读取响应中的meta.rung以查看生效的引擎。明确引擎后,后续重复流量可直接调用该引擎。复用成功的会话。 在 auto 调用后,返回的
session(代理 ID + cookies + userAgent)可通过/api/single/或/api/browser/重放,用于请求同一主机上的后续页面,并按该 endpoint 自身的价格计费:使用unblocker的 Single 消耗 2 积分,Browser 消耗 5 积分(交互式页面消耗 10 积分)。遵守速率限制。 即使使用了代理轮换,向单个站点每秒发送数百个 request 也会触发行为检测。请将 request 间隔至少保持在 1 到 2 秒。
保持
unblocker开启。 在 Single 和 Proxy 上,unblocker: true(默认值)会发送逼真的浏览器签名和 headers。在 Browser 上,它会启用质询求解器。仅在明确需要原生客户端签名或原始质询页面时才将其关闭。监控成功率。 查看 Dashboard 指标以跟踪不同时期的成功率。成功率骤降通常意味着目标站点更新了防护策略。
跳过失效出口。 如果
/api/proxy/或/api/auto/调用返回的代理 ID 随后开始失败,请在下次调用时将其传入ignoreProxies,以便 FourA 选择其他出口。重试前读取
defense。 供应商名称会提示你是否值得尝试不同的浏览器配置文件、是否需要完整渲染,或者该检查是否属于必须通过求解服务才能通过的类型。更换模拟的浏览器。 某些目标站点允许特定浏览器而拒绝其他浏览器。在 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。 - 存在法律限制的网站:请始终确保您的数据收集行为符合目标网站的服务条款及适用法律。
后续步骤
- 智能抓取 (Auto):深入了解
/api/auto/ - 选择合适的 Endpoint:Endpoint 选型指南
- 常见问题:解决 403 错误与验证页面问题
- API Endpoint:包含
exitCountries的完整参数参考 - 站点检查:
defense字段、系统列表及验证重放 - MCP 配方:工作流模板,包括 proxy 优先后转 browser 链路