mirror of
https://github.com/python/cpython.git
synced 2025-09-12 03:37:09 +00:00
Fix Issue14721: Send Content-length: 0 for empty body () in the http.request
This commit is contained in:
parent
ea24dda01f
commit
618802d55e
3 changed files with 32 additions and 1 deletions
|
@ -989,7 +989,7 @@ class HTTPConnection:
|
||||||
|
|
||||||
self.putrequest(method, url, **skips)
|
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)
|
self._set_content_length(body)
|
||||||
for hdr, value in headers.iteritems():
|
for hdr, value in headers.iteritems():
|
||||||
self.putheader(hdr, value)
|
self.putheader(hdr, value)
|
||||||
|
|
|
@ -90,6 +90,34 @@ class HeaderTests(TestCase):
|
||||||
conn.request('POST', '/', body, headers)
|
conn.request('POST', '/', body, headers)
|
||||||
self.assertEqual(conn._buffer.count[header.lower()], 1)
|
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):
|
def test_putheader(self):
|
||||||
conn = httplib.HTTPConnection('example.com')
|
conn = httplib.HTTPConnection('example.com')
|
||||||
conn.sock = FakeSocket(None)
|
conn.sock = FakeSocket(None)
|
||||||
|
|
|
@ -60,6 +60,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #9374: Generic parsing of query and fragment portions of url for any
|
||||||
scheme. Supported both by RFC3986 and RFC2396.
|
scheme. Supported both by RFC3986 and RFC2396.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue