Beste manier om een ​​URL-querystring te ontleden

Wat is de beste manier om gegevens te ontleden uit een URL-querystring (bijvoorbeeld gegevens die door een formulier aan de URL zijn toegevoegd) in python? Mijn doel is om formuliergegevens te accepteren en op dezelfde pagina weer te geven. Ik heb verschillende methoden onderzocht die niet helemaal zijn wat ik zoek.

Ik ben een eenvoudige webserver aan het maken met als doel meer te weten te komen over sockets. Deze webserver wordt alleen voor testdoeleinden gebruikt.

GET /?1pm=sample&2pm=&3pm=&4pm=&5pm= HTTP/1.1
Host: localhost:50000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:50000/?1pm=sample&2pm=&3pm=&4pm=&5pm=

Antwoord 1, autoriteit 100%

Hier is een voorbeeld waarin python3 urllib.parsewordt gebruikt:

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)

uitvoer:

{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}

Opmerking voor python2: from urlparse import urlparse, parse_qs

ZIE: https://pythonhosted.org/six/#module- six.moves.urllib.parse


Antwoord 2, autoriteit 66%

De module urllib.parse is je vriend: https://docs.python .org/3/library/urllib.parse.html

Bekijk urllib.parse.parse_qs(het ontleden van een queryreeks, dwz formuliergegevens die door GET naar de server zijn verzonden of formuliergegevens die door POST zijn gepost, in ieder geval voor niet-meerdelige gegevens). Er is ook cgi.FieldStoragevoor het interpreteren van multipart-data.

Voor het ontleden van de rest van een HTTP-interactie, zie RFC2616. de HTTP/1.1-protocolspecificatie.


Antwoord 3, autoriteit 32%

Als u een unieke sleutel uit de queryreeks nodig heeft, gebruikt u dict()met 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'}

Antwoord 4, autoriteit 8%

ingebouwd in python 2.7

>>> from urlparse import parse_qs
>>> parse_qs("search=quint&tags=python")
{'search': ['quint'], 'tags': ['python']}

Antwoord 5

slechts voor één regel snelle prototyping van CGI-variabelen zonder import, natuurlijk niet de beste, maar zou nuttig kunnen zijn.

agrs = dict(item.split('=') for item in env['QUERY_STRING'].split('&') if item)

Other episodes