调用API提示‘Missing params object in request’错误的求助
问题排查与解决
错误原因分析
状态码400 + Missing params object in request 说明服务器未正确解析到请求体中的params对象,核心问题是请求的Content-Type头未正确设置,或者请求体的传递方式不符合API的解析要求。Azure Data Factory能正常调用,是因为ADF会自动规范设置请求头和请求体格式。
解决方案
方案1:使用requests的json参数(推荐)
requests库提供了json参数,会自动将Python字典序列化为JSON字符串,同时自动添加Content-Type: application/json请求头,完全符合API的解析要求:
import requests url = 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.com/endpoints/generalAPI' auth_header = {'Authorization': 'Bearer cc686bbb8b6046c5ac52f70561516cc9'} # 构造请求体字典 payload = { "params": { "startDate": "2024-03-01", "endDate": "2024-03-31", "dataSource": "sqcdp-actions", "filter": {} } } # 使用json参数传递请求体 response = requests.put(url, headers=auth_header, json=payload) print(response.json())
方案2:手动设置Content-Type头(使用data参数时)
如果坚持用data+json.dumps的方式,必须显式添加Content-Type: application/json到请求头,否则服务器会将请求体当作普通表单数据解析,无法识别JSON格式的params:
import requests import json url = 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.com/endpoints/generalAPI' auth_header = { 'Authorization': 'Bearer cc686bbb8b6046c5ac52f70561516cc9', 'Content-Type': 'application/json' # 必须添加此头 } payload = { "params": { "startDate": "2024-03-01", "endDate": "2024-03-31", "dataSource": "sqcdp-actions", "filter": {} } } response = requests.put(url, headers=auth_header, data=json.dumps(payload)) print(response.json())
为什么之前的尝试失败?
- 不使用
json.dumps处理data:此时data是字符串,但请求头默认是application/x-www-form-urlencoded,服务器按表单数据解析,无法识别JSON结构的params。 - 仅使用params变量但未处理头信息:即便构造了正确的JSON字符串,缺少
Content-Type头会导致服务器无法正确解析请求体格式。
内容的提问来源于stack exchange,提问作者Saurabh Mehta
相关产品推荐
相关产品推荐

