使用Python Requests调用AERIUS connect计算接口报错求助
问题排查与修复方案
你的代码核心问题出在请求构造逻辑上,结合AERIUS API的要求,以下是具体问题分析和修复方案:
1. 关键错误点
- 参数传递冲突:
requests.post中同时使用json=payload和files会导致请求结构混乱——当传files时,requests会自动构造multipart/form-data请求,但json=payload会试图把参数作为独立JSON Body发送,这和API要求的“参数+文件同属multipart表单”的结构不兼容。 - 手动设置Content-Type:无需手动指定
Content-Type: multipart/form-data,requests在传入files时会自动生成包含boundary的正确请求头,手动设置会覆盖该逻辑,导致服务器无法解析请求。 - 参数与文件未关联:你定义的
payload里的files配置,没有和实际上传的文件在表单中绑定,服务器无法识别文件对应的计算参数。
2. 修复后的代码
import requests # 计算参数(原payload) calculation_params = { "options": { "name": "Optional calculation name", "calculationYear": 2023, "sendEmail": True, "outputType": "PDF", "calculationPointsType": "WNB_RECEPTORS", "appendices": ["EDGE_EFFECT_REPORT"] }, "files": [ { "fileName": "AERIUS_20230611122035_0_Scenario1.gml", "situation": "DEFINED_BY_FILE", "substance": "NH3", "calculationYear": 2023 } ] } # 构造multipart表单:把计算参数作为json字段传入 form_data = { 'json': (None, requests.utils.json.dumps(calculation_params), 'application/json') } # 上传文件,确保文件名和calculation_params中的fileName一致 files = { 'file': open(r"C:\Users\valen\OneDrive\Bureaublad\AERIUS_20230611122035_0_Scenario1.gml", 'rb') } url = "https://connect.aerius.nl/api/v7/wnb/calculate" headers = { 'accept': 'application/json', "api-key": 'place your personal api-key here' # 替换为你的有效API密钥 } # 发送请求:仅传form_data和files,不要用json参数 response = requests.post(url, data=form_data, headers=headers, files=files) # 打印详细响应用于调试 print(f"状态码: {response.status_code}") print(f"响应内容: {response.text}")
3. 调试建议
- 查看
response.text:服务器会返回具体错误原因,比如参数格式错误、API密钥无效、文件类型不兼容等。 - 验证API密钥:确认密钥拥有WNB计算接口的访问权限,且未过期。
- 检查文件状态:确保文件路径正确、未被锁定(比如OneDrive文件是否处于同步状态)。
内容的提问来源于stack exchange,提问作者valentino
相关产品推荐
相关产品推荐

