if content_length is not None:
return self._read_fixed_body(content_length, delegate)
- if headers.get("Transfer-Encoding") == "chunked":
+ if headers.get("Transfer-Encoding", "").lower() == "chunked":
return self._read_chunked_body(delegate)
if self.is_client:
return self._read_body_until_close(delegate)
bar
0
+""".replace(b"\n", b"\r\n"))
+ read_stream_body(self.stream, self.stop)
+ headers, response = self.wait()
+ self.assertEqual(json_decode(response), {u'foo': [u'bar']})
+
+ def test_chunked_request_uppercase(self):
+ # As per RFC 2616 section 3.6, "Transfer-Encoding" header's value is
+ # case-insensitive.
+ self.stream.write(b"""\
+POST /echo HTTP/1.1
+Transfer-Encoding: Chunked
+Content-Type: application/x-www-form-urlencoded
+
+4
+foo=
+3
+bar
+0
+
""".replace(b"\n", b"\r\n"))
read_stream_body(self.stream, self.stop)
headers, response = self.wait()