Python批量POST JSON文件 适配接口每分钟50次限流实现求助
实现方案
核心需要实现三个逻辑:遍历所有目标JSON文件、控制请求频率满足限流规则、补全基础容错避免任务中途中断。
限流规则换算:每分钟最多50次请求,即单次请求最小间隔为60/50=1.2秒,实际使用时建议留0.1秒左右冗余,避免请求耗时、网络延迟导致的计数超限。
可直接运行的代码
import os import time import requests # 基础配置,替换为你的真实参数 url = 'testtest' headers = { 'Authorization': 'testtest', 'Accept': '*/*', 'Content-Type': 'application/json' } file_root_path = r'C:\Accountmanager' # 加r前缀标记为原始字符串,避免Windows路径反斜杠转义错误 total_file_count = 2800 request_interval = 60 / 50 + 0.1 # 单请求间隔1.3秒,留冗余防限流 for file_index in range(1, total_file_count + 1): # 拼接当前要提交的文件路径 current_file_name = f'json{file_index}.json' current_file_path = os.path.join(file_root_path, current_file_name) try: # 用with上下文管理器打开文件,自动释放文件句柄,避免资源泄漏 with open(current_file_path, 'rb') as f: # 加超时参数,避免单个请求无响应卡住整个任务 resp = requests.post(url, data=f, headers=headers, timeout=15) # 打印进度方便排查 print(f"[进度 {file_index}/{total_file_count}] 文件{current_file_name}提交完成,响应状态码:{resp.status_code}") except Exception as e: # 单个文件提交失败不中断整体任务,打印错误信息即可 print(f"[进度 {file_index}/{total_file_count}] 文件{current_file_name}提交失败,错误:{str(e)}") # 无论请求成功失败,都等待够间隔时间,严格遵守限流规则 time.sleep(request_interval)
注意事项
- 代码里补了你原代码缺失的括号、文件自动关闭、请求超时、异常捕获逻辑,不会出现跑一半因为单个请求报错就中断、文件被占用的问题
- 如果你测试时发现还是触发限流,可以把
request_interval的值调大一点,比如改成1.5,总耗时也就70分钟左右,稳定性更高 - 如果需要重跑失败的文件,可以在异常捕获逻辑里把失败的文件序号存到列表里,所有文件遍历完之后单独遍历失败列表重新提交即可
- 不要尝试用并发提交提速,当前量级顺序提交的实现成本最低,也最容易匹配接口的限流规则,不会出现意外被封的情况
内容的提问来源于stack exchange,提问作者Aeromnk
相关产品推荐
相关产品推荐

