- buf.update(urlparse.parse_qsl(req.query))
- if req.ihead.get("Content-Type") == "application/x-www-form-urlencoded":
- if req.input.limit > 2 ** 20:
- raise ValueError("x-www-form-urlencoded data is absurdly long")
- rbody = req.input.read()
- buf.update(urlparse.parse_qsl(rbody))
+ buf.update(urllib.parse.parse_qsl(req.query, keep_blank_values=True))
+ ctype, ctpars = proto.pmimehead(req.ihead.get("Content-Type", ""))
+ if ctype == "application/x-www-form-urlencoded":
+ try:
+ rbody = req.input.read(2 ** 20)
+ except IOError as exc:
+ return exc
+ if len(rbody) >= 2 ** 20:
+ return ValueError("x-www-form-urlencoded data is absurdly long")
+ buf.update(urllib.parse.parse_qsl(rbody.decode("latin1"), encoding=ctpars.get("charset", "utf-8"), keep_blank_values=True))