2024-05-23 22:55:48 发布
网友
我正在调试一个微控制器,我已经建立,这是写原始的HTTP请求逐行。我在后台使用Flask,我希望看到整个请求的格式如下:
GET / HTTP/1.1 Content-length: 123 User-agent: blah ...
我知道烧瓶是基于WSGI的。有没有办法让这个和烧瓶一起用?
假设你想要完整的细节
@app.route('/') def index(): print request.__dict__ #this prints all variables in `dict` format including `headers`
是的,Flask是一个WSGI应用程序,因此将应用程序包装在记录请求的额外层中很简单:
import pprint class LoggingMiddleware(object): def __init__(self, app): self._app = app def __call__(self, environ, resp): errorlog = environ['wsgi.errors'] pprint.pprint(('REQUEST', environ), stream=errorlog) def log_response(status, headers, *args): pprint.pprint(('RESPONSE', status, headers), stream=errorlog) return resp(status, headers, *args) return self._app(environ, log_response)
这定义了一个中间件来包装Flask应用程序。其优点是它完全独立于烧瓶运行,让你对进和出的东西有未经过滤的洞察力。
如何应用中间件取决于所使用的确切WSGI服务器;请参阅WSGI服务器文档。
使用内置服务器(app.run())运行Flask时,请执行以下操作:
app.run()
if __name__ == '__main__': app.wsgi_app = LoggingMiddleware(app.wsgi_app) app.run()
小包装舞将app.wsgi_app放在Flask WSGI应用程序周围。
app.wsgi_app
输出到wsgi.error流;在该流中,结果再次取决于您的WSGI服务器;mod_wsgi将其放入站点的Apache错误日志中,捆绑的Flask服务器将其打印到stderr。
wsgi.error
mod_wsgi
stderr
使用flask,您可以访问包含所有HTTP详细信息的请求对象:
from flask import request @app.route('/') def index(): print request.headers
假设你想要完整的细节
还有别的办法
是的,Flask是一个WSGI应用程序,因此将应用程序包装在记录请求的额外层中很简单:
这定义了一个中间件来包装Flask应用程序。其优点是它完全独立于烧瓶运行,让你对进和出的东西有未经过滤的洞察力。
如何应用中间件取决于所使用的确切WSGI服务器;请参阅WSGI服务器文档。
使用内置服务器(
app.run()
)运行Flask时,请执行以下操作:小包装舞将
app.wsgi_app
放在Flask WSGI应用程序周围。输出到
wsgi.error
流;在该流中,结果再次取决于您的WSGI服务器;mod_wsgi
将其放入站点的Apache错误日志中,捆绑的Flask服务器将其打印到stderr
。使用flask,您可以访问包含所有HTTP详细信息的请求对象:
相关问题 更多 >
编程相关推荐