servidor - simple python http server post
La mejor forma de analizar una cadena de consulta URL (3)
¿Cuál es la mejor manera de analizar los datos de una cadena de consulta de URL (por ejemplo, datos añadidos a la URL por un formulario) en python? Mi objetivo es aceptar datos de formulario y mostrarlos en la misma página. Investigué varios métodos que no son exactamente lo que estoy buscando.
Estoy creando un servidor web simple con el objetivo de aprender sobre los sockets. Este servidor web no se usará para fines de prueba.
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=
Aquí hay un ejemplo usando 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)
{''i'': [''main''], ''enc'': ['' Hello ''], ''mode'': [''front''], ''sid'': [''12ab'']}
Nota para python2: from urlparse import urlparse, parse_qs
VER: https://pythonhosted.org/six/#module-six.moves.urllib.parse
El módulo urllib.parse es tu amigo: https://docs.python.org/3/library/urllib.parse.html
Consulte urllib.parse.parse_qs (analizar una cadena de consulta, es decir, datos de formulario enviados al servidor por GET o datos de formulario publicados por POST, al menos para datos que no sean de partes múltiples). También hay cgi.FieldStorage para interpretar datos de cgi.FieldStorage partes.
Para analizar el resto de una interacción HTTP, consulte RFC2616 , que es la especificación del protocolo HTTP / 1.1.
Si necesita una clave única de la cadena de consulta, use dict()
con 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''}