working querystring dumping

netiawifi
selfisekai 2020-09-05 01:40:03 +02:00
parent 50cbd5fa59
commit 75266f42a9
1 changed files with 30 additions and 8 deletions

View File

@ -1,7 +1,7 @@
# flake8: noqa: E501
import re
from urllib.parse import parse_qs, quote
from urllib.parse import parse_qs, quote as qs_quote
def get_user_agent():
@ -20,11 +20,33 @@ def regex_search_string(regexes, string, default=None):
def dump_qs(obj):
qs = ""
old_qs = []
qs = []
for key in obj:
if isinstance(obj[key], (str, int, float)):
qs += quote(key) + "=" + quote(str(obj[key]))
else:
# TODO: support nested dicts and lists
raise TypeError("unknown types in dump_qs")
return qs
old_qs.append((key, obj[key]))
not_flat = True
while not_flat:
not_flat = False
for old_qs_element in old_qs:
if isinstance(old_qs_element[1], (str, int, float)):
qs.append((old_qs_element[0], old_qs_element[1]))
elif isinstance(old_qs_element[1], (dict)):
for subkey in old_qs_element[1]:
qs.append(
(old_qs_element[0] + "[" + subkey + "]", old_qs_element[1][subkey]))
if isinstance(old_qs_element[1][subkey], (dict, list)):
not_flat = True
elif isinstance(old_qs_element[1], (list)):
for element in old_qs_element[1]:
qs.append(
(old_qs_element[0] + "[]", element))
if isinstance(element, (dict, list)):
not_flat = True
if not_flat:
old_qs = qs
qs = []
strng = ""
for el in qs:
strng += qs_quote(str(el[0]), encoding="utf8") + "=" + \
qs_quote(str(el[1]), encoding="utf8") + "&"
return strng[:-1]