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

时间:2018-08-10 07:57:10

标签: python post server multipartform-data multipart

我在Python上解析多部分请求时遇到了问题。我使用http.server创建了一个服务器,并尝试处理诸如GET,POST和POST multipart之类的请求。 GET和POST都可以,但是当我尝试从多部分requset中提取数据时,我得到了:

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

我的目的是通过多部分请求获取图像。

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

  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"

1 个答案:

答案 0 :(得分:0)

HTTP 1.1 spec要求消息带有正文(在本例中为传入的POST请求)具有内容长度或传输编码标头。

cgi模块期望该请求具有一个content-length头,并且由于不存在而崩溃。

请求格式错误,因此,如果您自己未生成请求,则服务器应捕获异常,并在这种情况下返回400 Bad Request响应。如果您自己生成请求,则需要提供一个内容长度标头。