先停掉自动重试,把已经落盘的原始响应和当前游标保存下来,再判断限流是暂时的还是配额已经耗尽。只要原始结果还在,后续换用更低频的调用或人工补查都能接着做;一旦让脚本在限流后继续循环,最危险的不是报错,而是旧结果被覆盖、分页游标丢失,最后连已经拿到的部分都无法复原。
同样是脚本报错,处理方式并不一样。你要先看返回内容里有没有明确的限流信号,例如状态码、重试等待时间或配额提示;如果只是连接超时、DNS 失败或目标站返回空内容,那更可能是网络或对方临时不可用,而不是配额被打满。
可以按下面这组证据区分:
这一步的产出不是结论,而是一个标记:把本次任务标成“限流待恢复”或“链路待重试”。标记不同,下一步动作完全不同。
假设你手里有一个正在跑的查询脚本,它按分页逐条请求,每页结果写进同一个结果文件。限流出现时,建议按顺序做这三步。
一个假设的例子:脚本计划请求 200 页,在第 63 页被限流。如果你在退出前把第 1 到 62 页的原始响应和“下一页从 63 开始”写入状态文件,那么恢复时可以只补第 63 页之后的内容。如果没有保存游标,就只能从头再跑,既浪费配额,也可能因为目标数据已经变化而让前后两段结果对不上。
限流后最容易犯的错,是拿一份不完整的结果当成完整结论。判断能否使用,看两个条件是否同时成立:
这两个条件只要有一个不满足,就应该把当前结果标为“部分数据”,只用于排查和预估,不用于对外结论。反过来,如果缺失比例很小、截断位置随机、且你的判断只依赖大体趋势,可以先使用,但在交付时注明数据截止到哪一页。
恢复之前,先根据限流的性质选择路径,而不是直接重跑脚本。
这里有一个取舍:降低频率能保护配额,但会让任务周期变长;如果业务等不起,就需要缩小查询范围,而不是提高频率硬跑。选择哪一种,取决于你的结果是要当天用,还是可以隔天补齐。
下一次再遇到限流,能不能快速恢复,取决于这次有没有留下可读的状态。建议在脚本里固定两个检查点:每次成功请求后更新游标,每完成一个批次后落盘一次结果。这样即使进程被中断,损失也只是一个批次,而不是整次任务。
同时,给结果文件写一个简短的说明,记录数据来源、请求时间范围、已覆盖的页数和缺失部分。这份说明不需要复杂,但能让接手的人判断这份结果处在什么状态。限流本身不会毁掉已有结果,真正会毁掉结果的是没有保存状态就继续重试。