在Flask或WSGI中打印原始HTTP请求

2024-05-23 22:55:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调试一个微控制器,我已经建立,这是写原始的HTTP请求逐行。我在后台使用Flask,我希望看到整个请求的格式如下:

GET / HTTP/1.1
Content-length: 123
User-agent: blah
...

我知道烧瓶是基于WSGI的。有没有办法让这个和烧瓶一起用?


Tags: httpflaskwsgiget烧瓶格式contentlength
3条回答

假设你想要完整的细节

还有别的办法

@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时,请执行以下操作:

if __name__ == '__main__':
    app.wsgi_app = LoggingMiddleware(app.wsgi_app)
    app.run()

小包装舞将app.wsgi_app放在Flask WSGI应用程序周围。

输出到wsgi.error流;在该流中,结果再次取决于您的WSGI服务器;mod_wsgi将其放入站点的Apache错误日志中,捆绑的Flask服务器将其打印到stderr

使用flask,您可以访问包含所有HTTP详细信息的请求对象:

from flask import request

@app.route('/')
def index():
    print request.headers

相关问题 更多 >