diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/httplib.py | 15 | ||||
-rw-r--r-- | Lib/test/test_httplib.py | 13 |
2 files changed, 24 insertions, 4 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index caf6ccd..9527e29 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -208,10 +208,11 @@ class HTTPResponse: # 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.debuglevel = debuglevel self.strict = strict + self._method = method self.msg = None @@ -326,7 +327,8 @@ class HTTPResponse: # does the body have a fixed length? (of zero) if (status == 204 or # No Content status == 304 or # Not Modified - 100 <= status < 200): # 1xx codes + 100 <= status < 200 or # 1xx codes + self._method == 'HEAD'): self.length = 0 # if the connection remains open, and we aren't using chunked, and @@ -497,6 +499,7 @@ class HTTPConnection: self._buffer = [] self.__response = None self.__state = _CS_IDLE + self._method = None self._set_hostport(host, port) if strict is not None: @@ -626,6 +629,8 @@ class HTTPConnection: else: raise CannotSendRequest() + # Save the method we use, we need it later in the response phase + self._method = method if not url: url = '/' str = '%s %s %s' % (method, url, self._http_vsn_str) @@ -763,9 +768,11 @@ class HTTPConnection: if self.debuglevel > 0: response = self.response_class(self.sock, self.debuglevel, - strict=self.strict) + strict=self.strict, + method=self._method) else: - response = self.response_class(self.sock, strict=self.strict) + response = self.response_class(self.sock, strict=self.strict, + method=self._method) response.begin() assert response.will_close != _UNKNOWN diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 8764455..29f4503 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -78,4 +78,17 @@ def _test(): if cookies != hdr: 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() |