SF bug 622042: Don't expect response body from HEAD request.

Bug fix candidate.
This commit is contained in:
Jeremy Hylton 2003-05-05 16:13:58 +00:00
parent 581c36773a
commit c1b2cb9d8f
3 changed files with 25 additions and 4 deletions

View File

@ -208,10 +208,11 @@ class HTTPResponse:
# See RFC 2616 sec 19.6 and RFC 1945 sec 6 for details. # See RFC 2616 sec 19.6 and RFC 1945 sec 6 for details.
def __init__(self, sock, debuglevel=0, strict=0): def __init__(self, sock, debuglevel=0, strict=0, method=None):
self.fp = sock.makefile('rb', 0) self.fp = sock.makefile('rb', 0)
self.debuglevel = debuglevel self.debuglevel = debuglevel
self.strict = strict self.strict = strict
self._method = method
self.msg = None self.msg = None
@ -326,7 +327,8 @@ def begin(self):
# does the body have a fixed length? (of zero) # does the body have a fixed length? (of zero)
if (status == 204 or # No Content if (status == 204 or # No Content
status == 304 or # Not Modified status == 304 or # Not Modified
100 <= status < 200): # 1xx codes 100 <= status < 200 or # 1xx codes
self._method == 'HEAD'):
self.length = 0 self.length = 0
# if the connection remains open, and we aren't using chunked, and # if the connection remains open, and we aren't using chunked, and
@ -497,6 +499,7 @@ def __init__(self, host, port=None, strict=None):
self._buffer = [] self._buffer = []
self.__response = None self.__response = None
self.__state = _CS_IDLE self.__state = _CS_IDLE
self._method = None
self._set_hostport(host, port) self._set_hostport(host, port)
if strict is not None: if strict is not None:
@ -626,6 +629,8 @@ def putrequest(self, method, url, skip_host=0):
else: else:
raise CannotSendRequest() raise CannotSendRequest()
# Save the method we use, we need it later in the response phase
self._method = method
if not url: if not url:
url = '/' url = '/'
str = '%s %s %s' % (method, url, self._http_vsn_str) str = '%s %s %s' % (method, url, self._http_vsn_str)
@ -763,9 +768,11 @@ def getresponse(self):
if self.debuglevel > 0: if self.debuglevel > 0:
response = self.response_class(self.sock, self.debuglevel, response = self.response_class(self.sock, self.debuglevel,
strict=self.strict) strict=self.strict,
method=self._method)
else: else:
response = self.response_class(self.sock, strict=self.strict) response = self.response_class(self.sock, strict=self.strict,
method=self._method)
response.begin() response.begin()
assert response.will_close != _UNKNOWN assert response.will_close != _UNKNOWN

View File

@ -78,4 +78,17 @@ def _test():
if cookies != hdr: if cookies != hdr:
raise AssertionError, "multiple headers not combined properly" raise AssertionError, "multiple headers not combined properly"
# test that the library doesn't attempt to read any data
# from a head request
conn = httplib.HTTPConnection("www.python.org")
conn.connect()
conn.request("HEAD", "/", headers={"Connection" : "keep-alive"})
resp = conn.getresponse()
if resp.status != 200:
raise AssertionError, "Expected status 200, got %d" % resp.status
if resp.read() != "":
raise AssertionError, "Did not expect response from HEAD request"
resp.close()
conn.close()
test() test()

View File

@ -261,6 +261,7 @@ Michael Hudson
Jim Hugunin Jim Hugunin
Greg Humphreys Greg Humphreys
Jeremy Hylton Jeremy Hylton
Mihai Ibanescu
Juan David Ibáñez Palomar Juan David Ibáñez Palomar
Tony Ingraldi Tony Ingraldi
John Interrante John Interrante