如何通过FastAPI避免GET请求中的+符号被替换为空格?
解决FastAPI中GET参数+被替换为空格的问题
HTTP标准规定,URL查询参数中的+会被解析为空格,这是HTTP客户端的默认行为,并非FastAPI的问题。以下两种方式可规避该情况:
方法一:请求端按规范编码+
将请求中的+替换为URL编码值%2B,示例请求URL:http://127.0.0.1:8000/?q=1%2B1
此时后端直接接收参数即可得到原始的1+1。
方法二:后端手动解析原始查询字符串
通过FastAPI的Request对象获取原始查询参数,绕过默认的解析逻辑,手动处理以保留+:
from fastapi import FastAPI, Request from urllib.parse import unquote app = FastAPI() @app.get('/') async def root(request: Request): query_str = request.url.query q = "" if query_str: for param in query_str.split('&'): if '=' in param: key, value = param.split('=', 1) if key == 'q': # 使用unquote而非unquote_plus,避免将+替换为空格 q = unquote(value) break return {"message": q}
当发起http://127.0.0.1:8000/?q=1+1请求时,该接口会返回{"message":"1+1"}。
内容的提问来源于stack exchange,提问作者Vyacheslav
相关产品推荐
相关产品推荐

