Python调用需日期范围过滤的API返回404的传参问题
解决方法
返回404的核心原因有两个:一是未传入接口强制要求的日期范围筛选参数,二是需要确认代码中填写的接口路径与文档给出的正式路径完全一致。
接口文档参考:
直接按下面的步骤修改代码即可:
- 将代码里的占位符接口地址
https://blabla.com/get-sales-information替换为文档给出的真实接口路径,路径拼写错误、多写/漏写路径段都会直接触发404。 - GET请求的查询参数不需要手动拼接在URL字符串后,requests库提供了
params入参,传入字段与值对应的字典即可,库会自动完成参数拼接、特殊字符编码的工作。 - 日期参数格式直接采用返回样例中的
YYYY-MM-DD格式即可,参数名不要凭空猜测,对照接口文档「请求参数」章节标注的准确字段名填写即可,这类接口的日期范围参数常见命名为startDate/endDate、dateFrom/dateTo、salesDateStart/salesDateEnd。
修正后的可运行代码:
import requests from requests.auth import HTTPBasicAuth # 替换为文档给出的真实接口地址 api_url = "https://替换为实际接口域名/get-sales-information" # 替换为真实的Basic Auth认证账号密码 auth_info = HTTPBasicAuth("实际账号", "实际密码") # 配置必填的日期筛选参数,字典key替换为接口文档标注的准确参数名 query_params = { "startDate": "2021-03-01", # 替换为待查询的日期范围起点 "endDate": "2021-03-31" # 替换为待查询的日期范围终点 } resp = requests.get(api_url, auth=auth_info, params=query_params) # 调试用:打印最终发起请求的完整URL,可直接复制到浏览器访问验证参数拼接是否正确 print(f"实际请求URL:{resp.url}") print(f"响应状态码:{resp.status_code}") if resp.status_code == 200: # 直接将返回的JSON数据解析为Python原生列表/字典 sales_data = resp.json() print("查询到的销售数据:") print(sales_data) else: # 请求失败时打印服务端返回的原始内容,可快速定位参数错误、权限不足等问题 print(f"请求失败,服务端返回内容:{resp.text}")
补充说明
- 不要手动拼接URL参数,很容易出现特殊字符未编码、漏写参数连接符
&的问题,使用params传参是requests官方推荐的标准写法,稳定性更高。 - 原代码中导入的
json库无需额外调用,resp.json()方法已经内置了JSON解析逻辑,会自动将接口返回的JSON字符串转换为Python原生对象。 - 如果传入日期参数后仍报错,先查看打印出的实际请求URL,核对拼接出的参数名、日期格式是否与接口文档要求完全一致。
内容的提问来源于stack exchange,提问作者Dede Soetopo
相关产品推荐
相关产品推荐

