Python中如何将FastAPI请求的URL编码字节流转换为原始输入字符串
问题解决:FastAPI请求体URL编码内容还原
你当前获取到的请求体是application/x-www-form-urlencoded类型的编码数据,普通UTF-8解码仅完成字节到字符串的转换,不会处理URL编码规则下的转义字符,包括:
+是该编码格式中空格的替代符号%开头的十六进制序列是特殊字符的转义表达,比如%3D对应=、%22对应双引号
解决方法
使用Python标准库urllib.parse中的unquote_plus方法处理解码后的字符串,即可还原原始输入内容,修改后的代码如下:
from fastapi import Request from urllib.parse import unquote_plus async def my_action(request: Request): data = await request.body() # 先完成字节到字符串的转码,再做URL编码还原 raw_input = unquote_plus(data.decode("utf-8")) print(raw_input)
输出验证
运行上述代码后,输出内容和输入完全一致:
process query=my_event my_User=king Prop_A="Prop Val" Prop_B=Val_B other=1 Minutes
拓展提示
如果你的需求是单独获取每个参数的取值,不需要手动解析原始内容,直接调用FastAPI内置的表单解析方法即可:
async def my_action(request: Request): form_data = await request.form() # 直接通过参数名取值,例如 form_data["process query"] 即可得到 "my_event"
内容的提问来源于stack exchange,提问作者Parashuram
相关产品推荐
相关产品推荐

