最新动态
/api/auto endpoint 现在是获取任何 URL 有效 response 的最短路径。将其指向目标。Auto 会选择通过 Single, Proxy Finder 或 Browser 运行 request,在遇到反爬虫挑战时进行处理,并返回一个可供下次调用重用的会话。
单一 endpoint。任何目标。无需您手动切换模式。
这就是核心理念。本文余下部分将介绍其工作原理、使用成本以及需要注意的细节。
工作原理
Auto 底层设有一系列阶梯规则(按成本从低到高排列)。在每次 request 中,Auto 会逐级尝试,直到某一级返回符合您 validate 规则的 response。
阶梯顺序如下:
- 缓存会话 (Cached session)。 如果 Auto 拥有该主机之前调用的预热会话,它会首先通过该会话重放。这是成本最低的路径。
- Proxy Finder。 轮换 proxy request。适用于主要依靠 IP 信誉进行防护的网站。
- Browser。 执行 JavaScript 的完整渲染,解决反爬虫挑战,并收集网站下发的 cookie。
一旦某一级成功,Auto 会存储它找到的会话:所使用的 proxy id,网站下发的 cookie,以及 User-Agent。在下次调用同一主机时,Auto 会首先尝试该会话。如果它依然有效,您只需支付低成本层级的费用,而非高成本层级。
最小化调用示例:
curl -X POST "https://api.foura.ai/api/auto" \
-H "Authorization: Bearer pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/data",
"validate": { "status": { "accept": [200] } }
}'
精简后的 response:
{
"status": 200,
"data": "...",
"headers": [...],
"meta": {
"rung": "cache",
"solved": false,
"attempts": 1,
"credits": 2
},
"session": {
"proxy": "CLN1B8",
"cookies": [{ "name": "cf_clearance", "value": "..." }],
"userAgent": "..."
}
}
接下来你需要关注两个字段。meta.rung 告诉你哪条路径胜出。session 是一个三元组,你可以将其带入 /api/single 调用,以自行重放相同的出口。proxy 字段是一个不透明的 base36 ID(无原始 IP),可安全记录并在系统间安全传递。
影响
这里有两个关键数字。
对受保护站点的首次调用会运行 Browser 阶段:渲染、求解、收集 cookie 并返回页面。这大约消耗 10 个 credit。一旦 Auto 缓存了该主机的有效会话,后续调用将通过 Single 运行,消耗 2 个 credit。因此,第二次调用比首次调用便宜 5 倍,且只要会话有效,之后的每次调用都会保持低费率。我们在上线期间于生产环境中进行了测量:无 cookie 的出口(一旦找到)重放时每次调用准确消耗 2 个 credit,而以往当每个请求都经过 Proxy Finder 时需要 10 个 credit。
第二个数字是:失败的阶段不收费。如果 Auto 尝试了三个代理并在第四个代理成功返回前都返回 403,则仅计算第四个代理的 credit。你只需为交付的内容付费,而非为搜索付费。
这就是核心价值。昂贵的阶段只运行一次,便宜的阶段会持续运行,而你无需自己编写缓存逻辑。
还有两种行为值得注意,因为它们解决了实际的生产难题:
地理围栏目标不再浪费出口。 当站点对大多数出口返回 451(或法律封锁插页)时,Auto 会学习哪些国家实际交付了内容。在下一次调用时,它会优先从这些国家获取新出口,并将并发负载分摊到这些出口上。因此,单个幸运的出口不会被过度使用并受到速率限制。
验证在每个阶段运行。 内容错误的页面(返回状态 200 且正文为法律声明的地理封锁)绝不会被视为成功。如果你的 validate.data.fail 显示"legal reasons",Auto 会继续尝试直到某个阶段通过验证。缓存的阶段不行。任何阶段都不行。如果没有任何阶段通过,你会得到一个诚实的失败结果和真实原因。
针对高级用户
当你通过 Auto 推送大量请求时,以下几个设置非常重要。
timeout_ms 是整个操作的预算,而不是每个阶段的预算。默认值为 120 秒。Auto 会对其进行分配:每个子调用获得 min(自然超时时间, 剩余预算),一旦剩余时间过少,系统就会停止启动新阶段。对于交互式延迟工作,请设置为 20000。对于允许较长尾部延迟的批量爬取,请保留默认值。
forceProxy 默认开启。除非你设置了 forceProxy: false,否则 Auto 从不使用 FourA 的源 IP 接触目标。注意一点:某些站点(带有 IP 信任门控的交互式 Cloudflare)从干净的数据中心 IP 访问实际上比从低信任的住宅出口访问效果更好。因此,forceProxy: false 会让某些目标变得更容易,而不是更难。如果你在特定主机上遇到重复的挑战,值得尝试将其关闭。
ignoreProxies 是客户端的避免列表。传递你已知失效的 proxy ID (来自之前在你一侧触发 rate limit 的 session.proxy),Auto 将在所有环节跳过它们:热 session 复用,出口搜索,以及对 Proxy Finder 的子调用。因此 Auto 不会重新选择你刚指定要避免的出口。
meta 还允许你在其上构建自己的仪表板:今天哪些 host 触发了浏览器层,每次交付的平均尝试次数,已解决 challenge 的 request 与干净 request 的比例。如果特定 host 突然从 2 个 credit 攀升到 10 个,这就是一个 session 衰减信号,你可以在账单飙升前采取行动。
结合这四者的示例如下:
import requests
r = requests.post(
"https://api.foura.ai/api/auto",
headers={"Authorization": "Bearer pk_live_..."},
json={
"url": "https://example.com/product/9876",
"timeout_ms": 30000,
"forceProxy": True,
"ignoreProxies": ["CLN1B8", "K7X9AB"],
"validate": {
"status": {"accept": [200]},
"data": {"accept": ['"price":'], "fail": ["captcha", "legal reasons"]}
}
}
).json()
# If Auto delivered, keep the session for the next call to this host
if r.get("status") == 200 and "session" in r:
session = r["session"] # {proxy, cookies, userAgent}
print(r["meta"]["rung"], r["meta"]["credits"], r["meta"]["attempts"])
关于 validate 模式本身,请参阅之前的演练:Validate Rules Now Decide What Counts as Success。
下一步
Auto 目前的路线图上有两项计划。
接下来会在 Dashboard 中推出会话检查功能。目前,Auto 为每个主机保留的会话位于服务内部,当您在本地调试消耗时无法查看。我们正在开发按主机的会话视图,以便您查看缓存的会话、它们的时长、生命周期以及每个会话背后的层级历史。此外,还会提供一个按钮,当目标发生变化且您知道缓存错误时,可以手动丢弃会话。
在此之后,将实施更严格的成本控制。每个请求的硬性信用额度上限 (在此次调用上的花费绝不超过 X,如果超出则直接失败),以及为目标从不需要浏览器层级的团队提供“single-only”模式。这两个功能目前都处于特性标志(flag)之后。
Auto 的意义在于您无需考虑调用哪个产品。但这并不意味着您无法检查具体情况。每个响应都会附带其采用的层级和建立的会话。读取这两个字段,您就会确切知道调用成本的来源。