Python调用REST API替换JSON payload name字段值失败如何解决
问题根因
你的代码有3个核心错误,导致替换失效、请求失败:
- f-string语法书写错误:你写的
'f{contents}'是普通字符串,不会触发变量替换,正确的f-string需要把f标记放在字符串引号外侧,比如f"{变量名}"。 - 文件读取逻辑错误:
readlines()会读取到带换行符、JSON语法标记(引号、逗号、方括号)的原始文本,直接使用会把无关符号带入name字段,不符合接口参数要求。你的roles.txt本身是标准JSON数组格式,直接用Python内置的json模块解析就能拿到干净的角色名列表。 - 缺少遍历循环逻辑:你只在请求前构造了一次payload,没有逐一遍历角色名替换name字段,自然无法完成批量创建。
修复后代码
import json import requests import time # 读取并解析角色列表文件 with open('roles.txt', 'r', encoding='utf-8') as file: role_name_list = json.load(file) # 接口固定配置,替换为你自己的有效鉴权信息 API_URL = 'https://api.test.com/api/v1/roles' # cookies = 你的登录有效cookies # headers = 你的请求头配置 # 遍历所有角色逐个发起创建请求 for role_name in role_name_list: # 每次循环动态构造payload,替换name字段值 payload = { 'role': { 'name': role_name, 'external_reference': { 'service_name': 'string', 'service_model': 'string', 'service_model_ref': 'string', 'status': 'string', 'external_message': 'string', 'external_link': 'string', 'external_status': 'string', 'locked': True, }, }, } # 发送请求 resp = requests.post(API_URL, cookies=cookies, headers=headers, json=payload) # 打印执行结果方便排查问题 print(f"角色[{role_name}]创建结果:状态码{resp.status_code},响应{resp.text}") # 增加1秒请求间隔,避免触发接口限流 time.sleep(1)
补充说明
- 不建议手动逐行处理文本做字符串裁剪,用
json.load()直接解析标准格式的文件是最稳妥的方案,不会出现符号遗漏、处理不干净的问题。 - payload建议放在循环内部每次重新构造,避免上一次请求的参数残留导致异常。
- 运行前确保你填入的
cookies、headers是当前有效的鉴权信息,否则会因为权限校验失败导致请求报错。
内容的提问来源于stack exchange,提问作者anish anil
相关产品推荐
相关产品推荐

