[Python-checkins] r70633 - in python/branches/py3k/Lib/http: client.py server.py

jeremy.hylton python-checkins at python.org
Fri Mar 27 18:14:19 CET 2009


Author: jeremy.hylton
Date: Fri Mar 27 18:14:18 2009
New Revision: 70633

Log:
Replace duplicate code in http.server with call to http.client.parse_headers().


Modified:
   python/branches/py3k/Lib/http/client.py
   python/branches/py3k/Lib/http/server.py

Modified: python/branches/py3k/Lib/http/client.py
==============================================================================
--- python/branches/py3k/Lib/http/client.py	(original)
+++ python/branches/py3k/Lib/http/client.py	Fri Mar 27 18:14:18 2009
@@ -237,8 +237,6 @@
     to parse.
 
     """
-    # XXX: Copied from http.server.BaseHTTPRequestHandler.parse_request,
-    # maybe we can just call this function from there.
     headers = []
     while True:
         line = fp.readline()

Modified: python/branches/py3k/Lib/http/server.py
==============================================================================
--- python/branches/py3k/Lib/http/server.py	(original)
+++ python/branches/py3k/Lib/http/server.py	Fri Mar 27 18:14:18 2009
@@ -88,6 +88,7 @@
 import os
 import sys
 import cgi
+import http.client
 import time
 import socket # For gethostbyaddr()
 import shutil
@@ -312,20 +313,7 @@
         self.command, self.path, self.request_version = command, path, version
 
         # Examine the headers and look for a Connection directive.
-
-        # MessageClass wants to see strings rather than bytes.
-        # But a TextIOWrapper around self.rfile would buffer too many bytes
-        # from the stream, bytes which we later need to read as bytes.
-        # So we read the correct bytes here, as bytes, then use StringIO
-        # to make them look like strings for MessageClass to parse.
-        headers = []
-        while True:
-            line = self.rfile.readline()
-            headers.append(line)
-            if line in (b'\r\n', b'\n', b''):
-                break
-        hfile = io.StringIO(b''.join(headers).decode('iso-8859-1'))
-        self.headers = email.parser.Parser(_class=self.MessageClass).parse(hfile)
+        self.headers = http.client.parse_headers(self.rfile)
 
         conntype = self.headers.get('Connection', "")
         if conntype.lower() == 'close':
@@ -524,7 +512,6 @@
     protocol_version = "HTTP/1.0"
 
     # MessageClass used to parse headers
-    import http.client
     MessageClass = http.client.HTTPMessage
 
     # Table mapping response codes to messages; entries have the


More information about the Python-checkins mailing list