本地部署FastAPI+Uvicorn后如何在Jupyter中正确调用接口解决422报错
FastAPI /predict接口422报错解决方法
错误根因
- 你调用
requests.post时直接把请求字典作为第二个参数传入,requests默认会将其编码为表单格式,而你的FastAPI接口通过Pydantic BaseModel定义的入参要求接收JSON格式的请求体,服务端解析请求体失败就会返回422状态码。 - 你定义的
params变量容易和requests内置的params关键字参数混淆,后者是用来拼接URL查询参数的,和本次需要传递的请求体不属于同个参数位。
修正后的请求代码
import requests url = 'http://127.0.0.1:8000/predict' # 定义JSON请求体 payload = {'title': ['Product Operations Software Engineer (DevOps / SRE)']} # 直接使用json关键字参数传参,requests会自动设置正确的请求头并序列化字典为JSON result = requests.post(url, json=payload) # 打印返回结果 print(result.status_code) print(result.json())
可选优化(服务端代码)
可以把Pydantic模型的字段定义更严谨,避免非法类型数据传入:
class JobTitle(BaseModel): title: list[str] # 明确要求字段为字符串列表
内容的提问来源于stack exchange,提问作者SoraHeart
相关产品推荐
相关产品推荐

