A-A+
FastAPI request捕获异常post数据包 json数据包等
【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
fastapi使用的是异步架构,比很多python框架都快非常多。最近也是在使用这个框架,但是最近在捕获异常的时候发现一个问题。就是怎么都无法捕获POST的提交数据,参数和值都获取不到。
@app.exception_handler(StarletteException)
# 自定义HttpRequest
请求异常,这个可以捕获所有的request
请求,,get请求的参数,head头都能捕获到,唯独post提交的数据没办法捕获到。
@app.exception_handler(RequestValidationError)
# 可以捕获post body的数据, 但是无法捕获404异常,也就是说,post存在的路径,而提交到一个404的path那么它没办法捕获到的。
我的同事还是比较有研究精神的,经过他的研究发现。StarletteException
这个异常类里面还是有东西的。
因为这个框架里面采用的就是异步的Starlette
所以,极有可能因为异步原因导致。
最终的解决方案如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @app.exception_handler(StarletteException) async def http_exception_handle(request, exc): """ :param request: 请求必不可少 :param exc: 错误栈处理 :return: """ body = b'' async for chunk in request.stream(): body += chunk with open(os.path.abspath('.') + "/log/" + request.client[0] + '_log.txt', "a", encoding='utf-8') as f: f.write('{} {}\n'.format(request.url, request.method)) f.write(str(request.headers) + '\n') f.write(bytes.decode(body, encoding='utf-8', errors='ignore') + '\n') f.write('=============================================================\n') return JSONResponse( {"code": "402", "message": "这里就已经把所有的异常信息都已经捕获齐全了,body就是post的数据"}) |
官方的参考文档:https://www.starlette.io/requests/#body
还可以参考:https://github.com/encode/starlette/blob/master/starlette/requests.py
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏