summaryrefslogtreecommitdiff
path: root/Lib/http
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/http')
-rw-r--r--Lib/http/client.py10
-rw-r--r--Lib/http/cookies.py30
-rw-r--r--Lib/http/server.py33
3 files changed, 20 insertions, 53 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py
index a8e59b9561..0234199dfa 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -72,7 +72,6 @@ import email.parser
import email.message
import http
import io
-import os
import re
import socket
import collections
@@ -642,14 +641,7 @@ class HTTPResponse(io.BufferedIOBase):
return self._read1_chunked(n)
if self.length is not None and (n < 0 or n > self.length):
n = self.length
- try:
- result = self.fp.read1(n)
- except ValueError:
- if n >= 0:
- raise
- # some implementations, like BufferedReader, don't support -1
- # Read an arbitrarily selected largeish chunk.
- result = self.fp.read1(16*1024)
+ result = self.fp.read1(n)
if not result and n:
self._close_conn()
elif self.length is not None:
diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py
index be3b080aa3..7e0259ee32 100644
--- a/Lib/http/cookies.py
+++ b/Lib/http/cookies.py
@@ -138,12 +138,6 @@ _nulljoin = ''.join
_semispacejoin = '; '.join
_spacejoin = ' '.join
-def _warn_deprecated_setter(setter):
- import warnings
- msg = ('The .%s setter is deprecated. The attribute will be read-only in '
- 'future releases. Please use the set() method instead.' % setter)
- warnings.warn(msg, DeprecationWarning, stacklevel=3)
-
#
# Define an exception visible to External modules
#
@@ -303,29 +297,14 @@ class Morsel(dict):
def key(self):
return self._key
- @key.setter
- def key(self, key):
- _warn_deprecated_setter('key')
- self._key = key
-
@property
def value(self):
return self._value
- @value.setter
- def value(self, value):
- _warn_deprecated_setter('value')
- self._value = value
-
@property
def coded_value(self):
return self._coded_value
- @coded_value.setter
- def coded_value(self, coded_value):
- _warn_deprecated_setter('coded_value')
- self._coded_value = coded_value
-
def __setitem__(self, K, V):
K = K.lower()
if not K in self._reserved:
@@ -366,14 +345,7 @@ class Morsel(dict):
def isReservedKey(self, K):
return K.lower() in self._reserved
- def set(self, key, val, coded_val, LegalChars=_LegalChars):
- if LegalChars != _LegalChars:
- import warnings
- warnings.warn(
- 'LegalChars parameter is deprecated, ignored and will '
- 'be removed in future versions.', DeprecationWarning,
- stacklevel=2)
-
+ def set(self, key, val, coded_val):
if key.lower() in self._reserved:
raise CookieError('Attempt to set a reserved key %r' % (key,))
if not _is_legal_key(key):
diff --git a/Lib/http/server.py b/Lib/http/server.py
index e12e45bfc3..61ddecc7ef 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -267,8 +267,8 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
are in self.command, self.path, self.request_version and
self.headers.
- Return True for success, False for failure; on failure, an
- error is sent back.
+ Return True for success, False for failure; on failure, any relevant
+ error response has already been sent back.
"""
self.command = None # set in case of error on the first line
@@ -278,10 +278,13 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
requestline = requestline.rstrip('\r\n')
self.requestline = requestline
words = requestline.split()
- if len(words) == 3:
- command, path, version = words
+ if len(words) == 0:
+ return False
+
+ if len(words) >= 3: # Enough to determine protocol version
+ version = words[-1]
try:
- if version[:5] != 'HTTP/':
+ if not version.startswith('HTTP/'):
raise ValueError
base_version_number = version.split('/', 1)[1]
version_number = base_version_number.split(".")
@@ -306,22 +309,22 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
HTTPStatus.HTTP_VERSION_NOT_SUPPORTED,
"Invalid HTTP version (%s)" % base_version_number)
return False
- elif len(words) == 2:
- command, path = words
+ self.request_version = version
+
+ if not 2 <= len(words) <= 3:
+ self.send_error(
+ HTTPStatus.BAD_REQUEST,
+ "Bad request syntax (%r)" % requestline)
+ return False
+ command, path = words[:2]
+ if len(words) == 2:
self.close_connection = True
if command != 'GET':
self.send_error(
HTTPStatus.BAD_REQUEST,
"Bad HTTP/0.9 request type (%r)" % command)
return False
- elif not words:
- return False
- else:
- self.send_error(
- HTTPStatus.BAD_REQUEST,
- "Bad request syntax (%r)" % requestline)
- return False
- self.command, self.path, self.request_version = command, path, version
+ self.command, self.path = command, path
# Examine the headers and look for a Connection directive.
try: