使用 email.message 解析 HTTP POST 请求?

问题描述 投票:0回答:0

随着标准

cgi
库的弃用,取而代之的是 WSGI 从 Python 3.11 开始,文档 alleges:

FieldStorage
类通常可以替换为……
email.message
模块或 [3rd-party] multipart for
POST
and
PUT
.

然而,第一个(使用标准库解析 HTTP POST 请求)实际上是如何完成的并不明显。

例如以下代码挂在

EmailBytesParser.parse()

import wsgiref.simple_server
import email.parser

import logging

_EmailBytesParser = email.parser.BytesParser()

def main_wsgi(environ, start_response):
    if environ['REQUEST_METHOD'] == 'GET':
        start_response('200 OK', [('Content-Type', 'text/html')])
        yield '<form method="POST" enctype="multipart/form-data"><label for="username">username:</label><input name="username" value="user123" /><br /><label for="avatar">avatar: </label><input name="avatar" type="file"><br /><input type="submit" value="register" />'.encode()
    else:
        assert environ['REQUEST_METHOD'] == 'POST'
        assert environ['CONTENT_TYPE'].startswith('multipart/form-data')
        start_response('200 OK', [('Content-Type', 'text/plain')])
        logging.debug("About to start parsing form data...")
        # body = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
        body = _EmailBytesParser.parse(environ['wsgi.input'], headersonly=True)
        logging.debug("Form data parsed!")
        yield repr(body).encode()

if __name__ == '__main__':
    logging.basicConfig()
    logging.getLogger().setLevel(logging.DEBUG)
    wsgiref.simple_server.make_server('', 8000, main_wsgi).serve_forever()

我无法在网上找到任何实际证明

email
模块对此适用性的代码示例。我做错了什么?

python parsing http-post wsgi python-3.11
© www.soinside.com 2019 - 2024. All rights reserved.