From: Ben Darnell Date: Sun, 16 Mar 2014 04:21:51 +0000 (-0400) Subject: HTTPServer: Support requests that are received in multiple chunks. X-Git-Tag: v4.0.0b1~91^2~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9c83cbbc87d7b33c068284afaa526dc2f8f18f9;p=thirdparty%2Ftornado.git HTTPServer: Support requests that are received in multiple chunks. --- diff --git a/tornado/httpserver.py b/tornado/httpserver.py index 9aa5bddf7..35d5a9750 100644 --- a/tornado/httpserver.py +++ b/tornado/httpserver.py @@ -161,6 +161,7 @@ class _ServerRequestAdapter(httputil.HTTPMessageDelegate): def __init__(self, server, connection): self.server = server self.connection = connection + self._chunks = [] def headers_received(self, start_line, headers): # HTTPRequest wants an IP, not a full socket address @@ -192,10 +193,10 @@ class _ServerRequestAdapter(httputil.HTTPMessageDelegate): headers=headers, remote_ip=remote_ip, protocol=protocol) def data_received(self, chunk): - assert not self.request.body - self.request.body = chunk + self._chunks.append(chunk) def finish(self): + self.request.body = b''.join(self._chunks) self.request._parse_body() self.server.request_callback(self.request) diff --git a/tornado/test/httpserver_test.py b/tornado/test/httpserver_test.py index 7fd6e5b52..82148298a 100644 --- a/tornado/test/httpserver_test.py +++ b/tornado/test/httpserver_test.py @@ -405,8 +405,10 @@ POST /echo HTTP/1.1 Transfer-Encoding: chunked Content-Type: application/x-www-form-urlencoded -7 -foo=bar +4 +foo= +3 +bar 0 """.replace(b"\n", b"\r\n"))