如何用Python在POST请求中迭代处理多个JSON对象
修改后的批量POST请求脚本
以下脚本可遍历commandoutputid.json中的所有JSON对象,为每个对象单独发起POST请求,同时支持两种常见的JSON文件存储格式:
#! /usr/bin/env python3 import requests import json from requests.structures import CaseInsensitiveDict # 目标API地址 url = 'https://...' # 请求头配置 headers = CaseInsensitiveDict() headers["Accept"] = "plain/text" headers["Authorization"] = "Bearer Token" # -------------------------- # 方式1:JSON文件为数组格式(如 [{"key":val}, {"key":val}, ...]) # -------------------------- with open('commandoutputid.json', 'r') as json_file: json_objects = json.load(json_file) # -------------------------- # 方式2:JSON文件为每行一个独立JSON对象(JSON Lines格式) # 若使用此格式,注释方式1代码,取消注释下面的代码 # -------------------------- # json_objects = [] # with open('commandoutputid.json', 'r') as json_file: # for line in json_file: # line = line.strip() # if line: # 跳过空行 # json_objects.append(json.loads(line)) # 遍历每个JSON对象发起请求 for idx, obj in enumerate(json_objects, 1): print(f"正在处理第 {idx} 个对象...") try: # 直接传入JSON对象,requests会自动完成序列化 response = requests.post(url, json=obj, headers=headers, verify=False) response.raise_for_status() # 捕获HTTP错误状态码 # 追加写入响应结果,避免覆盖历史数据 with open("backup_output.txt", "ab") as f: f.write(f"=== 第 {idx} 个请求响应 ===\n".encode('utf-8')) f.write(response.content) f.write(b"\n\n") print(f"第 {idx} 个请求处理完成,状态码:{response.status_code}") print(f"响应内容:{response.content.decode('utf-8')}\n") except Exception as e: print(f"第 {idx} 个请求失败:{str(e)}\n") continue
关键改动说明
- 精简冗余代码:移除原脚本中
turtle、lib2to3等无关导入模块,减少代码冗余 - 多格式适配:提供两种JSON文件读取方式,覆盖批量JSON数据的常见存储格式
- 批量遍历处理:通过
enumerate遍历所有JSON对象,同时记录序号方便跟踪处理进度 - 异常容错:捕获请求过程中的异常,避免单个请求失败导致整个脚本终止
- 结果持久化优化:每个请求的响应结果以追加方式写入文件,保留所有请求的历史响应数据
内容的提问来源于stack exchange,提问作者John Watkins IT Professional
相关产品推荐
相关产品推荐

