重定向链会导致抓取器中断。将二进制响应解码为文本会导致数据损坏。当你度过了“获取页面,解析 HTML”的阶段后,这两个问题会频繁出现。
我们发布了两个新的请求选项来处理这两种情况:followRedirects 和 returnBuffer。它们现已在 API 中可用。
工作原理
使用 followRedirects 进行重定向控制
大多数抓取 API 将重定向作为布尔值处理:跟随或不跟随。这在遇到循环重定向链,或者你需要中间的 302 响应本身来提取跟踪参数之前是有效的。
FourA 的 followRedirects 接受 0 到 20 之间的整数。如果省略它(或设置为 0),你将得到原始的重定向响应,包括 header 等所有内容。将其设置为 5,请求将在返回其到达的内容之前最多跟踪五次跳转。
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/short-link",
"followRedirects": 3,
"unblocker": true
}'
这将跟踪最多三次重定向。如果重定向链在两次后解析,你将获得最终页面。如果超过三次,你将获得第三次跳转返回的任何内容。
这种区别比你想象的更重要。电子商务网站在进入产品页面之前会通过跟踪 URL 进行重定向。你需要跟踪这些内容。但联盟网络和 URL 缩短器有时会创建深度达六次,七次或八次跳转的链。有些重定向循环永远不会解析。限制在特定的数字意味着你可以收集数据,而不会陷入消耗请求超时时间的无限循环中。
在此之前,解决方法是发送一个禁用重定向的请求,手动解析 Location header,然后发送另一个请求。这至少需要两次 API 调用,延迟加倍,并且需要你维护代码。现在只需一个带有数字的调用即可。
使用 returnBuffer 的原始二进制响应
当你收集图像,PDF 或 protobuf payload 时,文本解码会破坏数据。HTTP 库假设响应是文本,应用字符集检测,并静默地破坏每个不适合的字节。Protobuf 变得不可读。图像 header 被破坏。你最终得到损坏的文件,并且没有明显的错误消息来解释原因。
returnBuffer 告诉 API 完全跳过文本解码。
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product-image.jpg",
"returnBuffer": true
}'
响应主体以原始字节的形式返回(在 JSON 响应中进行 base64 编码)。在你的终端进行解码,你就会得到服务器发送的准确内容。没有字符集假设,没有编码转换,没有静默损坏。
这是我们见过的最常见的支持工单之一:用户收集产品图片或 PDF 目录,得到的文件无法打开。修复方法始终如一,但现在有了这个选项的标志,而不是解决方法。
影响
这两个功能都减少了每个任务的 API 调用次数。followRedirects 消除了手动的重定向跟踪循环。returnBuffer 消除了“获取,发现它已损坏,使用不同设置重新获取”的循环。
对于严重依赖重定向的目标(联盟链接,URL 缩短器,电子商务跟踪链),在早期测试中,当用户从手动处理重定向切换到 followRedirects 时,我们看到请求计数下降了 40-60%。对于二进制收集任务(产品图片,文档下载),returnBuffer 将多步解决方法变成了单一选项(早期结果)。
这些都不是华而不实的功能。它们是那种直到凌晨 3 点你的抓取器因为一个站点在他们的结账流程中添加了额外的重定向跳转而崩溃时,你才会想到的东西。
针对高级用户
将 followRedirects 与响应验证结合使用,以精确控制重定向链。跟随重定向,但如果最终目的地遇到阻碍,则使请求失败:
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/12345",
"followRedirects": 5,
"unblocker": true,
"validate": {
"status": { "fail": [403, 503] },
"data": { "fail": ["Access Denied", "captcha"] }
}
}'
这将跟随最多五次重定向,然后检查最终响应。如果站点将你重定向到 CAPTCHA 页面或拒绝访问页面,请求将干净利落地失败。无需在下游过滤垃圾数据。
对于二进制收集,当你需要在下载大文件之前检查内容类型时,将 returnBuffer 与 HEAD 请求配对。FourA 正确处理 HEAD,因此你无需获取主体即可检查 header。检查 Content-Type,决定它是否值得下载,然后进行带有 returnBuffer: true 的完整请求。
如果你使用 browser tasks 处理重度使用 JavaScript 的目标,请注意这些选项适用于直接 HTTP 引擎。浏览器请求通过浏览器内置的导航来处理重定向,该导航默认跟随重定向且没有上限。
下一步
我们正致力于通过 API 暴露更多请求级别的控制:自定义 DNS 解析,每阶段超时调优以及证书处理选项。目标是通过一个整洁的 REST 接口实现全部的解锁功能,而没有基础设施开销。
如果你需要特定的选项,我们在倾听。dashboard 已经显示了你的请求在使用这些新选项时的表现,因此你可以自己衡量差异。