def parse_qs(qstr, ignore_exc=True, encoding=DEFAULT_ENCODING): ''' Parse a url encoded string (a=b&c=d) into a QueryString object. @param url_enc_str: The string to parse @return: A QueryString object (a dict wrapper). >>> parse_qs('id=3') QueryString({u'id': [u'3']}) >>> parse_qs('id=3&id=4') QueryString({u'id': [u'3', u'4']}) >>> parse_qs('id=3&ff=4&id=5') QueryString({u'id': [u'3', u'5'], u'ff': [u'4']}) >>> parse_qs('pname') QueryString({u'pname': [u'']}) >>> parse_qs(u'%B1%D0%B1%D1=%B1%D6%B1%D7', encoding='euc-jp') QueryString({u'\u9834\u82f1': [u'\u75ab\u76ca']}) >>> parse_qs('%B1%D0%B1%D1=%B1%D6%B1%D7', encoding='euc-jp') QueryString({u'\u9834\u82f1': [u'\u75ab\u76ca']}) ''' qs = QueryString(encoding=encoding) if qstr: # convert to string if unicode if isinstance(qstr, unicode): qstr = qstr.encode(encoding, 'ignore') try: odict = OrderedDict() for name, value in urlparse.parse_qsl(qstr, keep_blank_values=True, strict_parsing=False): if name in odict: odict[name].append(value) else: odict[name] = [value] except Exception: if not ignore_exc: raise w3afException('Error while parsing "%r"' % (qstr,)) else: def decode(item): return ( item[0].decode(encoding, 'ignore'), [e.decode(encoding, 'ignore') for e in item[1]] ) qs.update((decode(item) for item in odict.items())) return qs
def parse_qs(qstr, ignore_exc=True, encoding=DEFAULT_ENCODING): ''' Parse a url encoded string (a=b&c=d) into a QueryString object. :param url_enc_str: The string to parse :return: A QueryString object (a dict wrapper). ''' if not isinstance(qstr, basestring): raise TypeError('parse_qs requires a basestring as input.') qs = QueryString(encoding=encoding) if qstr: # convert to string if unicode if isinstance(qstr, unicode): qstr = qstr.encode(encoding, 'ignore') try: odict = OrderedDict() for name, value in parse_qsl(qstr, keep_blank_values=True, strict_parsing=False): if name in odict: odict[name].append(value) else: odict[name] = [value] except Exception: if not ignore_exc: raise w3afException('Error while parsing "%r"' % (qstr,)) else: def decode(item): return ( item[0].decode(encoding, 'ignore'), [e.decode(encoding, 'ignore') for e in item[1]] ) qs.update((decode(item) for item in odict.items())) return qs
def parse_qs(qstr, ignore_exc=True, encoding=DEFAULT_ENCODING): ''' Parse a url encoded string (a=b&c=d) into a QueryString object. :param url_enc_str: The string to parse :return: A QueryString object (a dict wrapper). ''' if not isinstance(qstr, basestring): raise TypeError('parse_qs requires a basestring as input.') qs = QueryString(encoding=encoding) if qstr: # convert to string if unicode if isinstance(qstr, unicode): qstr = qstr.encode(encoding, 'ignore') try: odict = OrderedDict() for name, value in parse_qsl(qstr, keep_blank_values=True, strict_parsing=False): if name in odict: odict[name].append(value) else: odict[name] = [value] except Exception: if not ignore_exc: raise w3afException('Error while parsing "%r"' % (qstr, )) else: def decode(item): return (item[0].decode(encoding, 'ignore'), [e.decode(encoding, 'ignore') for e in item[1]]) qs.update((decode(item) for item in odict.items())) return qs