import socket
import time
-from tornado.escape import utf8, native_str, parse_qs_bytes
+from tornado.escape import native_str, parse_qs_bytes
from tornado import httputil
from tornado import iostream
from tornado.netutil import TCPServer
def _on_request_body(self, data):
self._request.body = data
- content_type = self._request.headers.get("Content-Type", "")
if self._request.method in ("POST", "PATCH", "PUT"):
- if content_type.startswith("application/x-www-form-urlencoded"):
- arguments = parse_qs_bytes(native_str(self._request.body))
- for name, values in arguments.iteritems():
- values = [v for v in values if v]
- if values:
- self._request.arguments.setdefault(name, []).extend(
- values)
- elif content_type.startswith("multipart/form-data"):
- fields = content_type.split(";")
- for field in fields:
- k, sep, v = field.strip().partition("=")
- if k == "boundary" and v:
- httputil.parse_multipart_form_data(
- utf8(v), data,
- self._request.arguments,
- self._request.files)
- break
- else:
- logging.warning("Invalid multipart/form-data")
+ httputil.parse_body_arguments(
+ self._request.headers.get("Content-Type", ""), data,
+ self._request.arguments, self._request.files)
self.request_callback(self._request)
import urllib
import re
+from tornado.escape import native_str, parse_qs_bytes, utf8
from tornado.util import b, ObjectDict
pass
+def parse_body_arguments(content_type, body, arguments, files):
+ if content_type.startswith("application/x-www-form-urlencoded"):
+ uri_arguments = parse_qs_bytes(native_str(body))
+ for name, values in uri_arguments.iteritems():
+ values = [v for v in values if v]
+ if values:
+ arguments.setdefault(name, []).extend(values)
+ elif content_type.startswith("multipart/form-data"):
+ fields = content_type.split(";")
+ for field in fields:
+ k, sep, v = field.strip().partition("=")
+ if k == "boundary" and v:
+ parse_multipart_form_data(utf8(v), body, arguments, files)
+ break
+ else:
+ logging.warning("Invalid multipart/form-data")
+
+
def parse_multipart_form_data(boundary, data, arguments, files):
"""Parses a multipart/form-data body.
# Parse request body
self.files = {}
- content_type = self.headers.get("Content-Type", "")
- if content_type.startswith("application/x-www-form-urlencoded"):
- for name, values in parse_qs_bytes(native_str(self.body)).iteritems():
- self.arguments.setdefault(name, []).extend(values)
- elif content_type.startswith("multipart/form-data"):
- if 'boundary=' in content_type:
- boundary = content_type.split('boundary=', 1)[1]
- if boundary:
- httputil.parse_multipart_form_data(
- utf8(boundary), self.body, self.arguments, self.files)
- else:
- logging.warning("Invalid multipart/form-data")
+ httputil.parse_body_arguments(self.headers.get("Content-Type", ""),
+ self.body, self.arguments, self.files)
self._start_time = time.time()
self._finish_time = None