diff --git a/AUTHORS.rst b/AUTHORS.rst index 3aa2a1e5..1dbd0409 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -173,3 +173,4 @@ Patches and Suggestions - Om Prakash Kumar (`@iamprakashom `_) - Philipp Konrad (`@gardiac2002 `_) - Hussain Tamboli (`@hussaintamboli `_) +- Casey Davidson (`@davidsoncasey `_) diff --git a/tests/test_requests.py b/tests/test_requests.py index 2c298bab..49417717 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1693,6 +1693,42 @@ class TestRequests: resp.close() assert resp.raw.closed + def test_empty_stream_with_auth_does_not_set_content_length_header(self, httpbin): + """Ensure that a byte stream with size 0 will not set both a Content-Length + and Transfer-Encoding header. + """ + auth = ('user', 'pass') + url = httpbin('post') + file_obj = io.BytesIO(b'') + r = requests.Request('POST', url, auth=auth, data=file_obj) + prepared_request = r.prepare() + assert 'Transfer-Encoding' in prepared_request.headers + assert 'Content-Length' not in prepared_request.headers + + def test_stream_with_auth_does_not_set_transfer_encoding_header(self, httpbin): + """Ensure that a byte stream with size > 0 will not set both a Content-Length + and Transfer-Encoding header. + """ + auth = ('user', 'pass') + url = httpbin('post') + file_obj = io.BytesIO(b'test data') + r = requests.Request('POST', url, auth=auth, data=file_obj) + prepared_request = r.prepare() + assert 'Transfer-Encoding' not in prepared_request.headers + assert 'Content-Length' in prepared_request.headers + + def test_chunked_upload_does_not_set_content_length_header(self, httpbin): + """Ensure that requests with a generator body stream using + Transfer-Encoding: chunked, not a Content-Length header. + """ + data = (i for i in [b'a', b'b', b'c']) + url = httpbin('post') + r = requests.Request('POST', url, data=data) + prepared_request = r.prepare() + assert 'Transfer-Encoding' in prepared_request.headers + assert 'Content-Length' not in prepared_request.headers + + class TestCaseInsensitiveDict: @pytest.mark.parametrize(