调用带path parameters的GSA Perdiem API传参异常求助
问题根因
你的代码有三个明显错误,直接导致请求无法命中正确接口:
- 请求方法错误:OpenAPI文档明确标注该接口仅接受
GET请求,你用requests.post()发POST请求,根本不会被接口的GET路由处理。 - 路径参数传参逻辑错误:
zip和year是路径参数,必须直接替换URL路径里的{zip}、{year}占位符。params参数是用来传URL末尾?后面拼接的查询参数的,不会自动替换路径里的占位符,你实际发请求的时候URL里还留着{zip}和{year}的原始字符串,自然匹配不到正确的资源路径。 - 实际请求地址不符合规则:你当前的写法最终请求的URL是
https://api.gsa.gov/travel/perdiem/v2/rates/zip/{zip}/year/{year}?zip=22041&year=2022,和接口要求的路径格式完全不符,返回空rates数组是正常结果。
修正后的代码
import requests # 定义URL模板 url_template = "https://api.gsa.gov/travel/perdiem/v2/rates/zip/{zip}/year/{year}" api_key = "替换为你自己的API密钥" headers = { "X-API-KEY": api_key } # 替换路径占位符,生成实际请求地址 request_url = url_template.format(zip=22041, year="2022") # 用GET方法发起请求,路径参数已经拼接完成,不需要传params resp = requests.get(request_url, headers=headers) print(resp.json())
调试建议
后续调这类接口时,可以先打印resp.url查看实际发出的请求完整地址,和文档要求的格式做对比,能快速定位路径拼接、参数传错位置的问题。只有OpenAPI文档里标注in: "query"的参数,才需要放到params字典里传递。
内容的提问来源于stack exchange,提问作者ahap13
相关产品推荐
相关产品推荐

