def test_semicolon_inside_quotes(self): (header, subheaders) = parse_header( 'Content-Type: "text/html;"; charset=";UTF-8"; boundary=\';"hell";o;\'' ) self.assertEqual('text/html;', header) self.assertEqual({ 'charset': ';UTF-8', 'boundary': ';"hell";o;' }, subheaders)
def test_strip_whitespaces(self): (header, subheaders) = parse_header(' Content-Type :text/html ' ';charset = "UTF-8";crossorigin;' ' boundary = something ') self.assertEqual('text/html', header) self.assertEqual({ 'charset': 'UTF-8', 'crossorigin': '', 'boundary': 'something'}, subheaders)
def test_header_with_multiple_subheaders(self): (header, subheaders) = parse_header( 'Content-Type: multipart/form-data; boundary=something; charset=UTF-8' ) self.assertEqual('multipart/form-data', header) self.assertEqual({ 'charset': 'UTF-8', 'boundary': 'something' }, subheaders)
def test_strip_whitespaces(self): (header, subheaders) = parse_header(' Content-Type :text/html ' ';charset = "UTF-8";crossorigin;' ' boundary = something ') self.assertEqual('text/html', header) self.assertEqual( { 'charset': 'UTF-8', 'crossorigin': '', 'boundary': 'something' }, subheaders)
def __init__(self, header, files_path): header_str = header.decode('utf-8') if '\r\n' in header_str: header_str = header_str[:header_str.index('\r\n')] (value, sub_headers) = parse_header(header_str) self.name = sub_headers['name'] self.filename = sub_headers.get('filename') if self.filename: self.path = os.path.join(files_path, self.filename) self.path = file_utils.create_unique_filename(self.path) # touch file open(self.path, 'w').close() else: self.value = ''
def __init__(self, headers, output_files_path) -> None: (content_type, content_type_dict) = parse_header(headers.get('Content-Type')) content_length = headers.get('Content-Length') self.max_length = int(content_length) if content_length else 0 if content_type != 'multipart/form-data': raise Exception('Unsupported content type: ' + content_type) if 'boundary' not in content_type_dict: raise Exception('Failed to find boundary in header ' + content_type) self._boundary = b'--' + content_type_dict['boundary'].encode('utf-8') self._fields_separator = b'\r\n' + self._boundary self._buffer = b'' self._current_part = None self._output_files_path = output_files_path self._read_bytes = 0 self.values = {} self.files = {}
def test_simple_header(self): (header, subheaders) = parse_header('Content-Type: text/html') self.assertEqual('text/html', header) self.assertEqual({}, subheaders)
def test_semicolon_inside_quotes(self): (header, subheaders) = parse_header('Content-Type: "text/html;"; charset=";UTF-8"; boundary=\';"hell";o;\'') self.assertEqual('text/html;', header) self.assertEqual({'charset': ';UTF-8', 'boundary': ';"hell";o;'}, subheaders)
def test_subheader_with_quotes(self): (header, subheaders) = parse_header('Content-Type: text/html; charset="UTF-8"') self.assertEqual('text/html', header) self.assertEqual({'charset': 'UTF-8'}, subheaders)
def test_header_with_subheader_without_val(self): (header, subheaders) = parse_header('Content-Type: multipart/form-data; crossorigin; charset=UTF-8') self.assertEqual('multipart/form-data', header) self.assertEqual({'charset': 'UTF-8', 'crossorigin': ''}, subheaders)
def test_header_with_multiple_subheaders(self): (header, subheaders) = parse_header('Content-Type: multipart/form-data; boundary=something; charset=UTF-8') self.assertEqual('multipart/form-data', header) self.assertEqual({'charset': 'UTF-8', 'boundary': 'something'}, subheaders)
def _get_boundary(self, request): (_, header_params) = tornado_utils.parse_header(request.headers['Content-Type']) boundary = ('--' + header_params['boundary']).encode('utf-8') return boundary
def test_header_with_subheader_without_val(self): (header, subheaders) = parse_header( 'Content-Type: multipart/form-data; crossorigin; charset=UTF-8') self.assertEqual('multipart/form-data', header) self.assertEqual({'charset': 'UTF-8', 'crossorigin': ''}, subheaders)
def _get_boundary(self, request): (_, header_params) = tornado_utils.parse_header( request.headers['Content-Type']) boundary = ('--' + header_params['boundary']).encode('utf-8') return boundary