Python Session调用网络设备REST接口返回空CheckApplyTable问题排查
排查Python Session调用REST接口返回空列表问题
我通过Python的requests.Session向网络设备发起REST调用执行配置变更。当配置应用失败时,直接调用设备的CheckApplyTable接口能拿到带错误信息的JSON响应,但用Python代码调用时,这个接口返回的却是空列表。
代码片段如下:
header = {'Accept': 'text/html, application/json', 'Accept-Encoding': 'gzip, deflate, br'} apply_url = 'https://' + server + '/config?action=apply' apply_success_url = 'https://' + server + '/config/CheckApplyTable' with requests.Session() as session: session.auth = auth session.verify = False session.headers = header session.post(apply_url) check_apply = session.get(apply_success_url) jcheck_apply = check_apply.json() print(jcheck_apply)
排查遗漏点:
- 未验证POST请求的执行结果:代码直接发起POST请求但未检查响应状态,若POST请求本身失败(比如返回4xx/5xx),后续GET接口自然拿不到错误数据。需添加状态校验:
apply_response = session.post(apply_url) # 主动抛出HTTP错误,或手动判断status_code是否为200系列 apply_response.raise_for_status() - 请求头配置不匹配:当前
Accept包含text/html,可能导致设备返回非JSON格式内容;另外POST配置变更通常需要指定Content-Type(比如application/json),调整请求头:header = {'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/json'} - 缺少配置变更的请求体:POST接口执行配置变更时,通常需要携带具体的配置数据(JSON/表单格式),代码中
session.post(apply_url)未传入任何body参数,可能导致配置未提交,因此无错误信息返回:# 示例:传入JSON格式的配置内容 config_payload = {"config_item": "config_value"} apply_response = session.post(apply_url, json=config_payload) - 未考虑配置变更的延迟:设备应用配置需要时间,POST后立即调用检查接口可能还未生成错误信息,需添加短暂等待:
import time time.sleep(3) # 根据设备性能调整等待时长 - 检查GET响应的原始内容:打印
check_apply.status_code和check_apply.text,确认是否返回了非200状态,或是返回了HTML错误页(解析为JSON后变成空列表)。
内容的提问来源于stack exchange,提问作者standardcandle
相关产品推荐
相关产品推荐

