def prepare(self) -> None:
for key, value in self.stream.get_headers().items():
+ # Ignore Transfer-Encoding if the Content-Length has been set explicitly.
+ if key.lower() == "transfer-encoding" and "content-length" in self.headers:
+ continue
self.headers.setdefault(key, value)
auto_headers: typing.List[typing.Tuple[bytes, bytes]] = []
assert request.headers["Transfer-Encoding"] == "chunked"
+def test_ignore_transfer_encoding_header_if_content_length_exists():
+ """
+ `Transfer-Encoding` should be ignored if `Content-Length` has been set explicitly.
+ See https://github.com/encode/httpx/issues/1168
+ """
+
+ def streaming_body(data):
+ yield data # pragma: nocover
+
+ data = streaming_body(b"abcd")
+
+ headers = {"Content-Length": "4"}
+ request = httpx.Request("POST", "http://example.org", data=data, headers=headers)
+ assert "Transfer-Encoding" not in request.headers
+ assert request.headers["Content-Length"] == "4"
+
+
def test_override_host_header():
headers = {"host": "1.2.3.4:80"}