错误与限制
每个错误码的含义与是否值得重试,以及为何把来源的拒绝报告为拒绝而非空结果。
形状
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Invalid request body",
"request_id": "req_…",
"retryable": false,
"details": { }
}
}用于分支判断的是 retryable。除此之外的字段都不是稳定契约。
错误码
| 错误码 | 含义 | 重试 |
|---|---|---|
VALIDATION_FAILED | 请求体不符合模式 | 不可 —— 请修正请求 |
UNAUTHORIZED | 缺少密钥或密钥未知 | 不可 |
QUOTA_EXCEEDED | 达到套餐上限 | 周期重置后 |
NO_CAPACITY | 没有空闲的浏览器工作进程 | 可(请退避后重试) |
NO_IP_AVAILABLE | 所请求的国家没有健康的地址 | 可 —— 多为该区域仍在预热 |
INVALID_URL | 被 SSRF 防护拦截,或格式不正确 | 不可 |
BROWSER_FAILED | 页面未能加载 | 可(一次) |
RATE_LIMITED | 请求过多,来自你或指向该域名 | 可(间隔后重试) |
拒绝不是空结果
当来源返回 403 或 429 时,它会作为响应上的 HTTP 状态码报告,而不会变成「内容为空的成功」。
这个区别比看上去重要:空结果读起来像「那里什么都没有」,会让你去怀疑自己的选择器,而对方实际传达的是「慢一点」。
我们连同日期一起记录拒绝,就此停止,并且不把该来源放回计划表。
礼貌是强制的,不是建议
指向同一域名的请求,无论你发得多快,间隔都会被拉开。robots.txt 会被获取并遵守,包括 crawl-delay。被禁止的路径不会尝试获取,直接返回 INVALID_URL。
没有可以关掉它的设置,客服也无法为你关掉。 一旦被某个来源拒绝就再也读不回来,而损失落在每一位需要它的客户身上。
最后更新