servidor prueba javascript python ajax size server

javascript - servidor - localhost/prueba



Problema del servidor local Python: rfile se trunca cuando se publica a través de ajax (2)

Creé un trabajo al cavar a través del socket y el código http.server

Para CGIHTTPRequestHandler (en http.server), el almacenamiento en búfer para el rfile está habilitado, y todo después del primer buffer parece ser descartado.

Lo que (creo) que hice fue deshabilitar el almacenamiento en búfer y luego establecer el valor del "primer búfer" para que sea la cadena completa al agregar el siguiente código a la clase Handler:

rbufsize = -1 def do_POST(self): self.rfile._sock = self.rfile return CGIHTTPRequestHandler.do_POST(self)

Así que funciona por ahora, pero podría causar problemas en el futuro

Tengo un problema cuando recibo una cadena grande a través de una POST de Ajax a un http.server python local.

Estoy tratando de crear una aplicación web que se ejecuta fuera del localhost. La aplicación web carga un archivo JSON cuando se inicia y lo usa para cargar los datos en la aplicación. Esta información termina siendo manipulada mientras se usa la aplicación.

Al guardar, quiero enviar toda la información modificada a una secuencia de comandos python, y luego escribir esos datos en el archivo JSON antes mencionado, por lo que cuando se vuelva a abrir la aplicación web, tendrá los datos más recientes.

El servidor funciona correctamente y guardar datos más pequeños en otros archivos funciona sin problemas. El problema se debe al tamaño de esta información que quiero guardar. Al enviar los datos (como una cadena JSON.stringified) al script de python, la cadena se trunca, por lo que el script de python no puede analizarlo para recrear el objeto JSON.

Modifiqué la función do_POST para devolver el encabezado de longitud de contenido y luego el tamaño real de los datos recibidos:

def do_POST(self): length = int(self.headers[''Content-Length'']) print(length) post_data = self.rfile.read(length) print(len(post_data))

Al enviar los datos no modificados desde el navegador, el encabezado Content-length es 1013727, pero la longitud del archivo rfile es solo 23684.

Imprimí los datos de rfile y, de hecho, no es toda la cadena que traté de enviar y se detiene en el medio de una matriz.

Lo comprobé usando las Herramientas de desarrollo de Chrome, y la carga útil de la solicitud también es la cadena completa que esperaba, así que supongo que el problema podría ser con las limitaciones de tamaño de archivo del servidor http. Lamentablemente, no puedo encontrar ninguna información sobre lo que puede ser o cómo cambiarlo.

Estoy usando Python 3.4 y Google Chrome como mi navegador.

Cualquier ayuda será apreciada. ¡Gracias!


También estaba experimentando el mismo problema con Python 3.4 + Chrome. El error también ocurre con IE y Firefox.

Lo arreglé cambiando:

# Make rfile unbuffered -- we need to read one line and then pass # the rest to a subprocess, so we can''t use buffered input. #rbufsize = 0 rbufsize = -1

y comentando:

# throw away additional data [see bug #427345] ## while select.select([self.rfile._sock], [], [], 0)[0]: ## if not self.rfile._sock.recv(1): ## break

El problema parece ser el almacenamiento en memoria intermedia de archivos mientras que los datos POST son grandes con CGI ...

No sé por qué ... Abrí una nueva entrada en la base de datos de errores de Python.