Postman中GET请求可获取完整数据,Python仅返回元数据如何解决?
解决Epicor ERP REST API V2获取完整数据的Python调用问题
核心修正方案与示例代码
1. 确认URL的正确格式
Epicor V2 API查询接口获取业务数据的正确URL是在基础查询地址后直接追加/Data,无需额外的?或&metadata#data这类后缀。比如:
- 基础查询地址:
https://你的Epicor实例地址/api/v2/Erp/BaqSvc/你的BAQ名称 - 完整数据请求地址:
https://你的Epicor实例地址/api/v2/Erp/BaqSvc/你的BAQ名称/Data
2. 完全复刻Postman的请求配置
要确保Python请求的认证方式、请求头和Postman完全一致:
- Basic HTTPS认证:直接通过
requests库的auth参数传入用户名密码,或手动构造Authorization请求头 - API密钥:在请求头中添加对应字段(通常为
Epicor-Api-Key,需和Postman中的键名完全匹配)
3. 可直接运行的Python示例
import requests # 替换为你的实际配置 epicor_base_url = "https://你的Epicor实例地址/api/v2/Erp/BaqSvc/你的BAQ名称" data_url = f"{epicor_base_url}/Data" username = "你的用户名" password = "你的密码" api_key = "你的API密钥" # 构造请求头,明确指定接收JSON格式 headers = { "Epicor-Api-Key": api_key, "Accept": "application/json" } # 发送GET请求 response = requests.get( data_url, auth=(username, password), headers=headers, verify=True # 若使用自签证书可设为False,生产环境不建议 ) # 处理响应 if response.status_code == 200: result = response.json() print(f"成功获取{len(result['value'])}条数据") # 可在此处添加数据保存或处理逻辑 else: print(f"请求失败,状态码:{response.status_code},详情:{response.text}")
4. 常见问题排查
- 检查URL是否误加了
$metadata相关参数,这会导致返回元数据而非业务数据 - 确认
Accept请求头是否正确,未指定时部分API会默认返回元数据格式 - 打印
response.request.headers对比Postman的请求头,确保认证信息和API密钥已正确携带 - 若数据量较大,API会返回分页数据,需通过响应中的
@odata.nextLink字段实现循环分页获取
内容的提问来源于stack exchange,提问作者Alex Ciepluch
相关产品推荐
相关产品推荐

