2010-01-23 28 views
18

Estoy convirtiendo una aplicación Python2.6 en una aplicación Python3 y me estoy quedando atascado con el servidor. Me las he arreglado para que sirva las solicitudes GET, pero POST continúa eludiéndome. Esto es lo que comencé en 2.6 que funcionó pero en 3.x el servidor normal no maneja las solicitudes POST. De mi lectura del manual de Python parece que debo usar una clase de servidor CGI en su lugar y también asignar los scripts a ese directorio. Prefiero no tener que hacer esto, pero no puedo encontrar otra manera. ¿Me estoy perdiendo de algo?Python3 http.server POST example

def do_POST(self): 
    ctype, pdict = cgi.parse_header(self.headers.get('content-type')) 
    if ctype == 'multipart/form-data': 
     query = cgi.parse_multipart(self.rfile, pdict) 

    self.send_response(301) 

    self.end_headers() 
    upfilecontent = query.get('upfile') 
    print("filecontent", upfilecontent[0]) 
    self.wfile.write("<HTML>POST OK.<BR><BR>"); 
    self.wfile.write(upfilecontent[0]); 
+0

¿De qué manera el servidor normal no maneja las solicitudes de publicación en Python 3, que lo hace en Python 2? ¿Puedes explicarme cuál es el problema? –

+0

Sí, no implicará una función do_post() mientras que la de Python2 sí lo hará. No hay ejemplos de código sólido sobre cómo superarlo en la documentación de Python y Google no le ha ayudado tampoco. – Teifion

Respuesta

15

Después de hurgar y algunas horas más de googleo, he encontrado los siguientes trabajos.

def do_POST(self): 
    length = int(self.headers['Content-Length']) 
    post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8')) 
    # You now have a dictionary of the post data 

    self.wfile.write("Lorem Ipsum".encode("utf-8")) 

Me sorprende lo fácil que fue esto.