遇到限流先别重跑。把已经拿到的结果落盘、标记状态、只补缺口,通常比清空重试更安全。下面用一个假设情境说明判断顺序。
假设你用某个推广工具批量调用接口,前 40 条返回正常,第 41 条开始连续报“请求过于频繁”。此时最容易犯的错是:把整个任务重新执行一遍,覆盖掉已有结果。更稳妥的做法是先停止新请求,把前 40 条写入本地文件,并记录每一条的完成时间、输入参数和返回摘要。这样即使后续补跑,也有可对照的基线。
限流本身不等于数据错误,也不等于工具已经失效。它只说明当前调用节奏超过了服务端允许的范围。因此不能从“被限流”直接推出“结果不可信”,也不能从“前 40 条成功”推出“剩余部分一定失败”。
保护已有结果的最小动作是:把已完成的记录导出为独立文件,不要覆盖原文件;给每条记录加一个状态字段,例如“已完成”“待补”“失败”。如果工具本身支持断点续跑,先核对它续跑时读取的是哪份输入,避免把已完成项再次提交。
一个可执行的判断顺序:
如果缺口是连续的,通常说明限流从某个时间点开始生效,此时从断点处继续即可;如果缺口是分散的,说明限流可能由瞬时并发触发,需要先降低单次请求量。
补跑阶段的关键是“只写缺口”。可以先把待补条目的输入单独导出成一份小清单,再让脚本只读这份清单。写入时采用追加模式,而不是重写整个结果文件。这样即使补跑再次被限流,也不会影响已经完成的部分。
假设前 40 条中有 3 条返回内容为空,这 3 条应标记为“待确认”,而不是直接当作失败重跑。因为空结果可能来自输入本身无数据,也可能来自限流导致的截断。区分方法是:查看该条返回是否带有错误码或限流提示;如果没有错误码,先人工核对一条,再决定是否重跑。
如果你没有权限查看完整调用日志,仍然可以完成两件最小动作:一是把本地已收到的结果按时间排序,找出限流开始的大致位置;二是把待补条目的输入参数单独保存,等权限恢复后直接复用。不能由此推出的结论是:无法判断剩余条目是否一定成功,也无法判断限流是否由账号权限不足引起。
若工具提供的是汇总视图而非逐条明细,优先导出明细。汇总数字无法定位缺口,也无法支持断点续跑。具体导出入口和字段名称因工具而异,需要以你实际使用的版本为准。
完成补跑后,把本次的请求间隔、单批数量和触发限流的时点记下来,作为下一次调用的参考上限。这个记录不需要精确到毫秒,但应包含“每批多少条、间隔多久、连续多少批后被限制”。下次调用时把单批数量调低一档,观察是否还会触发。
如果多次降低频率仍然被限制,优先检查是否存在并发脚本同时调用同一接口,而不是继续下调单脚本速度。限流保护的是服务端整体负载,多个脚本叠加时,单个脚本的间隔再大也可能触发限制。
最后,补跑完成后要核对已完成总数是否等于预期总数。若数量对不上,先检查是否有条目被重复写入,再检查是否有条目在落盘时被跳过。只有数量与状态都能对齐,这批结果才适合进入下一步分析。