Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: net/tools/testserver/testserver.py

Issue 6134003: Prototype of chunked transfer encoded POST. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/tools/testserver/testserver.py
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index acfafae79516c3e82ca85e4578329ae77079545b..ac6d33a180415ffe227c6068d7832a5f28b811a2 100755
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -593,6 +593,25 @@ class TestPageHandler(BasePageHandler):
return True
+ def ReadRequestBody(self):
+ """This function reads the body of the current HTTP request, handling"""
+ """both plain and chunked transfer encoded requests."""
wtc 2011/01/21 19:35:54 Your multi-line comment format seems non-ideal. P
Satish 2011/01/21 20:29:57 Sure :) I saw lines 558-560 which were in this for
+ if self.headers.getheader('transfer-encoding') != 'chunked':
+ length = int(self.headers.getheader('content-length'))
+ return self.rfile.read(length)
+
+ # Read the response body as chunks.
wtc 2011/01/21 19:35:54 Typo: response body => request body
+ body = ""
+ while True:
+ line = self.rfile.readline()
+ if line == "0\r\n":
+ self.rfile.readline()
+ break
wtc 2011/01/21 19:35:54 Nit: you can check for "0\r\n" below, after line 6
+ length = int(line, 16)
wtc 2011/01/21 19:35:54 What does the argument "16" mean?
Satish 2011/01/21 20:29:57 The second argument is the base and we pass 16 sin
+ body += self.rfile.read(length)
+ self.rfile.read(2)
+ return body
+
def EchoHandler(self):
"""This handler just echoes back the payload of the request, for testing
form submission."""
@@ -603,9 +622,7 @@ class TestPageHandler(BasePageHandler):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
- length = int(self.headers.getheader('content-length'))
- request = self.rfile.read(length)
- self.wfile.write(request)
+ self.wfile.write(self.ReadRequestBody())
return True
def EchoTitleHandler(self):
@@ -617,8 +634,7 @@ class TestPageHandler(BasePageHandler):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
- length = int(self.headers.getheader('content-length'))
- request = self.rfile.read(length)
+ request = self.ReadRequestBody()
self.wfile.write('<html><head><title>')
self.wfile.write(request)
self.wfile.write('</title></head></html>')
@@ -642,8 +658,7 @@ class TestPageHandler(BasePageHandler):
'<h1>Request Body:</h1><pre>')
if self.command == 'POST' or self.command == 'PUT':
- length = int(self.headers.getheader('content-length'))
- qs = self.rfile.read(length)
+ qs = self.ReadRequestBody()
params = cgi.parse_qs(qs, keep_blank_values=1)
for param in params:
@@ -745,7 +760,7 @@ class TestPageHandler(BasePageHandler):
# Consume a request body if present.
if self.command == 'POST' or self.command == 'PUT' :
- self.rfile.read(int(self.headers.getheader('content-length')))
+ self.ReadRequestBody()
_, _, url_path, _, query, _ = urlparse.urlparse(self.path)
sub_path = url_path[len(prefix):]
@@ -1262,8 +1277,7 @@ class TestPageHandler(BasePageHandler):
if not self._ShouldHandleRequest("/device_management"):
return False
- length = int(self.headers.getheader('content-length'))
- raw_request = self.rfile.read(length)
+ raw_request = self.ReadRequestBody()
if not self.server._device_management_handler:
import device_management
@@ -1324,8 +1338,7 @@ class SyncPageHandler(BasePageHandler):
if not self._ShouldHandleRequest(test_name):
return False
- length = int(self.headers.getheader('content-length'))
- raw_request = self.rfile.read(length)
+ raw_request = self.ReadRequestBody()
http_response, raw_reply = self.server.HandleCommand(
self.path, raw_request)

Powered by Google App Engine
This is Rietveld 408576698