使用FastApi [重复]解析原始多部分/形式数据

1 篇文章 0 订阅
1 篇文章 0 订阅
这个问题在这里已经有答案: 如何创建可以接受形式或JSON主体的FastApi端点? (1个答案) FastApi:如何在不使用Multipart/form-data请求的情况下上传文件? (1个答案) 1分钟前关闭。 语境 我想使用fastapi到摄入Sendgrid的入站parse webhook,它以原始的multipart/form-data为单位(见下文)。我的代码正在收到有效载荷,但是当我尝试用fastapi解析它时,我会收到“ 422个无法取得的实体”错误(表明Pydantic拒绝它)。 有没有一种方法可以用FastApi解析这种数据,还是需要手动进行操作,然后以不同的格式将其传递给FastApi?(如果是这样,将不胜感激) 最小可再现的例子 简单的fastapi应用程序接收数据: 从输入任何导入 从Fastapi进口Fastapi,表格 app = fastapi() @app.post(“/inbound_email”) 异步def inbound_email( 标题:任何=表格(...), 主题:任何=表格(...), ): 尝试: 打印(标题) 打印(主题) 除例外为E: print(f“ inbound_email异常:{e}”) #使网络可以访问代码:我正在我告诉Ngrok听的端口上启动Uvicorn 如果__name__ ==“ __ -main __”: 导入紫外线 uvicorn.run(“ min_reproducible_example:app”,host =“ 127.0.0.1”,port = 54200,reload = true) SendGrid文档包含Webhook有效载荷的完整示例,但是为了简化我们的示例,我将使用截断版本(保持-Xyzzy s一致)。 这是ZSH终端的卷发: curl -location'https://myurlhere.ngrok-free.app/inbound_email'\ -data' - Xyzzy 内容分解:form-data;名称=“标题” 内容类型:多部分/替代方案;边界=“ 000000000021B9EA0605BBD8AC” - Xyzzy 内容分解:form-data;名称=“主题” 入站测试5 - Xyzzy-- ' 应用程序打印: “ POST /INBOUND_EMAIL HTTP /1.1” 422无法取得的实体 如果我从Postman提出相同的请求,我会从应用程序中获得更详细的响应: *422无法处理的条目* { “细节”: [ { “ type”:“失踪”, “ loc”:[[ “身体”, “标题” ],, “ msg”:“必需字段”, “输入”:null, “ url”:“ https://errors.pydantic.dev/2.3/v/missing” } 这是给出的 } 我想知道SendGrid的原始多部分格式是否是Fastapi没有解析工具的东西,好像我试图将请求直接解析为标题和主题,我没有成功: 从fastapi进口fastapi,请求 app = fastapi() @app.post(“/inbound_email”) 异步def inbound_email( 请求:请求, ): 尝试: #访问原始请求主体 raw_body =等待请求。Body() 打印(raw_body.decode(“ utf-8”)) #直接从request.form()直接访问表单数据 form_data =等待请求.form() body_headers = form_data.get(“标题”) 主题= form_data.get(“主题”) 打印(“ Body_headers:”,Body_headers) 打印(“主题:”,主题) 除例外为E: print(f“ inbound_email异常:{e}”) 如果__name__ ==“ __ -main __”: 导入紫外线 uvicorn.run(“ min_reproducible_example:app”,host =“ 127.0.0.1”,port = 54200,reload = true) 终端输出为: - Xyzzy 内容分解:form-data;名称=“标题” 内容类型:多部分/替代方案;边界=“ 000000000021B9EA0605BBD8AC” - Xyzzy 内容分解:form-data;名称=“主题” 入站测试5 - Xyzzy-- Body_headers:无 主题:无 其他一些笔记: 从Postman发送时,我以默认标头发送“ RAW”格式的正文文本。(我尝试了其他标题明确指定格式,边界等,但这尚未起作用)。 我可以以任何其他格式(包括Postman的“ Form-Data”)向FastAPI发送发布请求,并使一切正常工作。只是我无法解析的原始文本格式。 感谢您的任何帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值