FastAPI POST接口接收大字符串时返回422 Unprocessable Entity错误的解决方法
FastAPI POST接口接收大字符串时返回422 Unprocessable Entity错误的解决方法
兄弟,我仔细看了你的问题和代码,发现两个核心问题导致了这个422错误,咱们一步步来解决:
1. 先修复代码里的明显错误
你在/prompt_text接口里,把整个Prompt对象转成字符串传给ChatGPT了:
messages=[{"role": "user", "content": str(prompt)}]
这会把Prompt实例转换成类似text='你的大文本内容'的格式,不仅多了text=这个无用前缀,还可能在文本包含特殊字符时触发解析问题。正确的做法是直接取模型里的text字段:
@app.post("/prompt_text") def create_prompt(prompt: Prompt): response = g4f.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt.text}], # 这里改成prompt.text ) return {'result': response}
2. 调整FastAPI的请求体大小限制
FastAPI底层依赖的Starlette框架默认限制请求体大小为1MB,当你发送的字符串超过这个阈值时,就会触发解析失败,返回422错误。你需要在创建FastAPI实例时手动设置更大的限制,比如允许50MB的请求体:
app = FastAPI(body_limit=50 * 1024 * 1024) # 50MB,可根据你的需求调整
这样就能直接接收大段文本内容,不用再通过文件上传绕路。
3. 确认客户端的请求格式
最后再检查下你发送请求的方式:确保用的是POST方法,请求头里设置了Content-Type: application/json,并且请求体是标准的JSON格式,比如用curl测试的话:
curl -X POST "http://localhost:8000/prompt_text" -H "Content-Type: application/json" -d '{"text": "你的大段文本内容..."}'
如果客户端发送的格式不对,也会导致FastAPI无法解析请求体,返回422。
按照这几步调整后,应该就能正常接收大字符串了!
备注:内容来源于stack exchange,提问作者syrok
相关产品推荐
相关产品推荐

