summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2012-05-19 08:52:21 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2012-05-19 08:52:21 (GMT)
commit618802d55e19c1f2da28c9409256a7f2fbf59e99 (patch)
tree8aa4d19a9e1f0c9a0b40e40e17bc19862daa18c0
parentea24dda01f0bc151b55e922a1d5ec2b6193c8006 (diff)
downloadcpython-618802d55e19c1f2da28c9409256a7f2fbf59e99.zip
cpython-618802d55e19c1f2da28c9409256a7f2fbf59e99.tar.gz
cpython-618802d55e19c1f2da28c9409256a7f2fbf59e99.tar.bz2
Fix Issue14721: Send Content-length: 0 for empty body () in the http.request
-rw-r--r--Lib/httplib.py2
-rw-r--r--Lib/test/test_httplib.py28
-rw-r--r--Misc/NEWS3
3 files changed, 32 insertions, 1 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py
index 5d16e53..98296dc 100644
--- a/Lib/httplib.py
+++ b/Lib/httplib.py
@@ -989,7 +989,7 @@ class HTTPConnection:
self.putrequest(method, url, **skips)
- if body and ('content-length' not in header_names):
+ if body is not None and 'content-length' not in header_names:
self._set_content_length(body)
for hdr, value in headers.iteritems():
self.putheader(hdr, value)
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
index 05df875..5b5ae2e 100644
--- a/Lib/test/test_httplib.py
+++ b/Lib/test/test_httplib.py
@@ -90,6 +90,34 @@ class HeaderTests(TestCase):
conn.request('POST', '/', body, headers)
self.assertEqual(conn._buffer.count[header.lower()], 1)
+ def test_content_length_0(self):
+
+ class ContentLengthChecker(list):
+ def __init__(self):
+ list.__init__(self)
+ self.content_length = None
+ def append(self, item):
+ kv = item.split(':', 1)
+ if len(kv) > 1 and kv[0].lower() == 'content-length':
+ self.content_length = kv[1].strip()
+ list.append(self, item)
+
+ # POST with empty body
+ conn = httplib.HTTPConnection('example.com')
+ conn.sock = FakeSocket(None)
+ conn._buffer = ContentLengthChecker()
+ conn.request('POST', '/', '')
+ self.assertEqual(conn._buffer.content_length, '0',
+ 'Header Content-Length not set')
+
+ # PUT request with empty body
+ conn = httplib.HTTPConnection('example.com')
+ conn.sock = FakeSocket(None)
+ conn._buffer = ContentLengthChecker()
+ conn.request('PUT', '/', '')
+ self.assertEqual(conn._buffer.content_length, '0',
+ 'Header Content-Length not set')
+
def test_putheader(self):
conn = httplib.HTTPConnection('example.com')
conn.sock = FakeSocket(None)
diff --git a/Misc/NEWS b/Misc/NEWS
index 646b351..503e2f8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -60,6 +60,9 @@ Core and Builtins
Library
-------
+- Issue #14721: Send proper header, Content-length: 0 when the body is an empty
+ string ''. Initial Patch contributed by Arve Knudsen.
+
- Issue #9374: Generic parsing of query and fragment portions of url for any
scheme. Supported both by RFC3986 and RFC2396.