[Python-checkins] cpython: Issue #26586: Simple enhancements to BaseHTTPRequestHandler by Xiang Zhang

martin.panter python-checkins at python.org
Sat Apr 2 22:02:20 EDT 2016


https://hg.python.org/cpython/rev/1b696c744559
changeset: 100838:1b696c744559
user: Martin Panter <vadmium+py at gmail.com>
date: Sun Apr 03 01:28:53 2016 +0000
summary:
 Issue #26586: Simple enhancements to BaseHTTPRequestHandler by Xiang Zhang
files:
 Lib/http/server.py | 28 +++++++++++------------
 Lib/test/test_httpservers.py | 2 +-
 2 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/Lib/http/server.py b/Lib/http/server.py
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -137,7 +137,7 @@
 def server_bind(self):
 """Override server_bind to store the server name."""
 socketserver.TCPServer.server_bind(self)
- host, port = self.socket.getsockname()[:2]
+ host, port = self.server_address[:2]
 self.server_name = socket.getfqdn(host)
 self.server_port = port
 
@@ -283,12 +283,9 @@
 words = requestline.split()
 if len(words) == 3:
 command, path, version = words
- if version[:5] != 'HTTP/':
- self.send_error(
- HTTPStatus.BAD_REQUEST,
- "Bad request version (%r)" % version)
- return False
 try:
+ if version[:5] != 'HTTP/':
+ raise ValueError
 base_version_number = version.split('/', 1)[1]
 version_number = base_version_number.split(".")
 # RFC 2145 section 3.1 says there can be only one "." and
@@ -310,7 +307,7 @@
 if version_number >= (2, 0):
 self.send_error(
 HTTPStatus.HTTP_VERSION_NOT_SUPPORTED,
- "Invalid HTTP Version (%s)" % base_version_number)
+ "Invalid HTTP version (%s)" % base_version_number)
 return False
 elif len(words) == 2:
 command, path = words
@@ -333,10 +330,11 @@
 try:
 self.headers = http.client.parse_headers(self.rfile,
 _class=self.MessageClass)
- except http.client.LineTooLong:
+ except http.client.LineTooLong as err:
 self.send_error(
- HTTPStatus.BAD_REQUEST,
- "Line too long")
+ HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE,
+ "Line too long",
+ str(err))
 return False
 except http.client.HTTPException as err:
 self.send_error(
@@ -482,12 +480,12 @@
 
 def send_response_only(self, code, message=None):
 """Send the response header only."""
- if message is None:
- if code in self.responses:
- message = self.responses[code][0]
- else:
- message = ''
 if self.request_version != 'HTTP/0.9':
+ if message is None:
+ if code in self.responses:
+ message = self.responses[code][0]
+ else:
+ message = ''
 if not hasattr(self, '_headers_buffer'):
 self._headers_buffer = []
 self._headers_buffer.append(("%s %d %s\r\n" %
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -855,7 +855,7 @@
 # Issue #6791: same for headers
 result = self.send_typical_request(
 b'GET / HTTP/1.1\r\nX-Foo: bar' + b'r' * 65537 + b'\r\n\r\n')
- self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n')
+ self.assertEqual(result[0], b'HTTP/1.1 431 Line too long\r\n')
 self.assertFalse(self.handler.get_called)
 self.assertEqual(self.handler.requestline, 'GET / HTTP/1.1')
 
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /