Best way to parse a URL query string
Solution 1:
Here is an example using python3 urllib.parse
:
from urllib.parse import urlparse, parse_qs
URL='https://someurl.com/with/query_string?i=main&mode=front&sid=12ab&enc=+Hello'
parsed_url = urlparse(URL)
parse_qs(parsed_url.query)
output:
{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}
Note for python2: from urlparse import urlparse, parse_qs
SEE: https://pythonhosted.org/six/#module-six.moves.urllib.parse
Solution 2:
The urllib.parse module is your friend: https://docs.python.org/3/library/urllib.parse.html
Check out urllib.parse.parse_qs (parsing a query-string, i.e. form data sent to server by GET or form data posted by POST, at least for non-multipart data). There's also cgi.FieldStorage for interpreting multipart-data.
For parsing the rest of an HTTP interaction, see RFC2616, which is the HTTP/1.1 protocol specification.
Solution 3:
If you need unique key from query string, use dict()
with parse_qsl()
import urllib.parse
urllib.parse.urlparse('https://someurl.com/with/query_string?a=1&b=2&b=3').query
a=1&b=2&b=3
urllib.parse.parse_qs('a=1&b=2&b=3');
{'a': ['1'], 'b': ['2','3']}
urllib.parse.parse_qsl('a=1&b=2&b=3')
[('a', '1'), ('b', '2'), ('b', '3')]
dict(urllib.parse.parse_qsl('a=1&b=2&b=3'))
{'a': '1', 'b': '3'}
Solution 4:
built into python 2.7
>>> from urlparse import parse_qs
>>> parse_qs("search=quint&tags=python")
{'search': ['quint'], 'tags': ['python']}
Solution 5:
only for one line quick prototyping CGI vars without imports, not the best obviously but could be useful.
agrs = dict(item.split('=') for item in env['QUERY_STRING'].split('&') if item)