保护已有结果的关键,是把“已确认成功的发布”与“尚未确认的请求”分开落盘,并让脚本在限流后暂停重试、保留断点,而不是整批重跑。缺少完整返回数据或接口权限时,你仍可执行的最小动作是:为每条外链记录一个状态字段,把限流响应单独归档,并只对状态为“未提交”的条目重新排队。这样做的直接结果是重跑范围收窄,已成功的外链不会被二次提交或反复覆盖,下一步才能安全地恢复调用。
脚本连续调用发布接口时,常见现象是中途开始返回限流提示,随后本地记录里成功条数骤减,甚至整批看起来像归零。这里有两种合理解释。
这两种解释对应完全不同的处理动作。前者只需等待并重试;后者若直接整批重跑,可能产生重复外链或把已有成功记录冲掉。因此不能只凭“成功数下降”判断外链是否失效。
要判断限流到底卡在哪一层,可以检查三类证据。
这些证据只能缩小范围,不能单独证明外链一定存在或一定丢失。缺少接口权限时,你无法直接查询远端状态,只能依据本地日志和响应特征做保守判断。
在无法确认远端结果的前提下,可执行的最小动作是改造本地记录结构,把每条外链拆成三个状态:pending(未提交)、submitted(已提交待确认)、confirmed(已确认成功)。限流发生时,脚本应停止把新请求标记为失败,而是保留在 submitted,并记录限流响应的原文和时间。
恢复调用时,只重新排队 pending 条目;对 submitted 条目先做一次轻量查询或去重检查,确认不存在后再提交。这个动作的结果是:重跑量从整批缩小到未提交部分,已成功的外链不再被二次写入,下一步的恢复节奏也可以按剩余量估算,而不是盲目全量重试。
假设一次脚本调用计划发布 100 条外链,进行到第 40 条时开始返回限流提示,本地记录显示成功 12 条、失败 28 条。如果直接整批重跑,那 12 条可能被重复提交;如果只重跑失败条目,其中可能混有“已写入但未确认”的记录。
按状态分层处理后,可以把 28 条失败记录拆成 pending 和 submitted 两类:只有 pending 直接重跑,submitted 先做去重检查。假设检查发现其中 5 条已有对应记录,那么实际重跑范围就是 23 条,而不是 100 条或 28 条。这个数字只用于说明比较方法,不代表任何真实项目的比例。
上述做法成立的前提是:本地能保留限流前的状态快照,且脚本不会在无回执时自动改写成功记录。如果工具本身不提供状态字段或日志导出,就需要先用外部文件记录每次调用的目标、时间和响应摘要,再据此判断重跑范围。具体工具是否支持断点续跑、是否保留历史状态,需要以该工具的当前文档和实际返回为准,不能凭通用经验推断。
另外,请求量归零或抓取量下降本身不能证明处理正确,它也可能来自限流持续、任务队列清空或脚本提前退出。只有结合响应位置、状态字段和重复提交痕迹,才能决定下一步是继续等待、缩小重跑范围,还是暂停调用并检查脚本逻辑。