65 votes

Meilleur moyen d'analyser une chaîne de requête d'URL

Quelle est la meilleure façon d'analyser les données d'une chaîne de requête d'URL (par exemple, les données ajoutées à l'URL par un formulaire) en python ? Mon objectif est d'accepter les données du formulaire et de les afficher sur la même page. J'ai recherché plusieurs méthodes qui ne correspondent pas tout à fait à ce que je recherche.

Je crée un serveur Web simple dans le but d'apprendre les sockets. Ce serveur Web ne sera utilisé qu'à des fins de test.

 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=

66voto

jmunsch Points 709

Voici un exemple utilisant 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)

sortir:

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

Remarque pour python2 : from urlparse import urlparse, parse_qs

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

24voto

ahuigo Points 878

Si vous avez besoin d'une clé unique à partir de la chaîne de requête, utilisez dict() avec 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'}

6voto

Cuyler Quint Points 116

intégré à python 2.7

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

0voto

ollofx Points 1

seulement pour les vars CGI de prototypage rapide d'une ligne sans importations, pas le meilleur évidemment mais pourrait être utile.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X