在 Python 服务器上解析多部分请求

Parsing multipart request on Python server

我正在努力解决 Python 上解析多部分请求的问题。我已经使用 http.server 创建了一个服务器,并尝试处理诸如 GET、POST 和 POST 等请求。 GET 和 POST 没问题,但是当我尝试从多部分请求中提取数据时,我得到了这个:

line 220, in parse_multipart
    headers['Content-Length'] = pdict['CONTENT-LENGTH']
KeyError: 'CONTENT-LENGTH'

我的目的是通过multipart request获取一张图片。

这是我正在使用的代码片段:

  def do_POST(self):
        self.send_response(200)
        self.send_header('content-type', 'text/html')
        self.end_headers()
        ctype, pdict = cgi.parse_header(self.headers['content-type'])
        if ctype == 'multipart/form-data':
            print("multipart")
            ctype, pdict = cgi.parse_header(self.headers['content-type'])
            pdict['boundary'] = bytes(pdict['boundary'], "utf-8")
            if ctype == 'multipart/form-data':
               fields = cgi.parse_multipart(self.rfile, pdict) # the problem is here
        else:
            print("no-multipart")
            messagecontent = "messagecontent"

HTTP 1.1 spec 需要带有 body 的消息 - 在本例中为传入 POST 请求 - 具有 content-length 或 transfer-encoding header.

cgi 模块期望请求将有一个 content-length header,并且因为它不存在而崩溃。

请求格式错误,因此如果您不是自己生成请求,您的服务器应该捕获异常并 return 在这种情况下响应 400 Bad Request。如果您自己生成请求,则需要提供 content-length header。