that will be updated with the parsed contents.
"""
if content_type.startswith("application/x-www-form-urlencoded"):
- for name, values in uri_arguments.iteritems():
+ uri_arguments = parse_qs_bytes(native_str(body))
+ for name, values in uri_arguments.items():
+ values = [v for v in values if v]
+ uri_arguments = parse_qs_bytes(native_str(body), keep_blank_values=True)
++ for name, values in uri_arguments.items():
if values:
arguments.setdefault(name, []).extend(values)
elif content_type.startswith("multipart/form-data"):
def test_query_string_encoding(self):
response = self.fetch("/echo?foo=%C3%A9")
data = json_decode(response.body)
- self.assertEqual(data, {u"foo": [u"\u00e9"]})
+ self.assertEqual(data, {u("foo"): [u("\u00e9")]})
+
+ def test_empty_query_string(self):
+ response = self.fetch("/echo?foo=&foo=")
+ data = json_decode(response.body)
+ self.assertEqual(data, {u("foo"): [u(""), u("")]})
- self.assertEqual(data, {u"foo": [u""], u"bar": [u""]})
+ def test_empty_post_parameters(self):
+ response = self.fetch("/echo", method="POST", body="foo=&bar=")
+ data = json_decode(response.body)
++ self.assertEqual(data, {u("foo"): [u("")], u("bar"): [u("")]})
+
def test_types(self):
headers = {"Cookie": "foo=bar"}
response = self.fetch("/typecheck?foo=bar", headers=headers)