]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
HTTPServer: Support requests that are received in multiple chunks.
authorBen Darnell <ben@bendarnell.com>
Sun, 16 Mar 2014 04:21:51 +0000 (00:21 -0400)
committerBen Darnell <ben@bendarnell.com>
Sun, 16 Mar 2014 04:21:51 +0000 (00:21 -0400)
tornado/httpserver.py
tornado/test/httpserver_test.py

index 9aa5bddf73c9299f7f374bc2e1c4ce8feccb4d8a..35d5a9750b74dbc8469dd3014d4ea98ecf311cdf 100644 (file)
@@ -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)
 
index 7fd6e5b52491db75825bfff8cf1e714a6dd479bd..82148298a87d949577f2a1f36918674670fd09c6 100644 (file)
@@ -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"))