我在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"
答案 0 :(得分:0)
HTTP 1.1 spec要求消息带有正文(在本例中为传入的POST请求)具有内容长度或传输编码标头。
cgi模块期望该请求具有一个content-length
头,并且由于不存在而崩溃。
请求格式错误,因此,如果您自己未生成请求,则服务器应捕获异常,并在这种情况下返回400 Bad Request响应。如果您自己生成请求,则需要提供一个内容长度标头。