humans - Python httplib ResponseNotReady
python http server (5)
Además, errores como este pueden ocurrir cuando el servidor envía una respuesta sin un encabezado Content-Length, lo que paralizará el estado del cliente HTTP si se usa Keep-Alive y se envía otra solicitud por el mismo socket.
Estoy escribiendo un cliente REST para elgg usando Python, e incluso cuando la solicitud tiene éxito, obtengo esto en respuesta:
Traceback (most recent call last):
File "testclient.py", line 94, in <module>
result = sendMessage(token, h1)
File "testclient.py", line 46, in sendMessage
res = h1.getresponse().read()
File "C:/Python25/lib/httplib.py", line 918, in getresponse
raise ResponseNotReady()
httplib.ResponseNotReady
Al mirar el encabezado, veo (''content-length'', ''5749''), entonces sé que hay una página allí, pero no puedo usar .read () para verla porque aparece la excepción. ¿Qué significa ResponseNotReady y por qué no puedo ver el contenido que se devolvió?
Asegúrese de no volver a utilizar el mismo objeto de una conexión anterior. Tocará esto una vez que el servidor keep-alive termine y el socket se cierre.
Esto también puede ocurrir si un firewall bloquea la conexión.
Las respuestas anteriores son correctas, pero hay otro caso en el que podría obtener esa excepción:
Hacer múltiples solicitudes sin leer ninguna respuesta intermedia por completo.
Por ejemplo:
conn.request(''PUT'',...)
conn.request(''GET'',...)
# will not work: raises ResponseNotReady
conn.request(''PUT'',...)
r = conn.getresponse()
r.read() # <-- that''s the important call!
conn.request(''GET'',...)
r = conn.getresponse()
r.read() # <-- same thing
y así.
Me encontré con esta misma excepción hoy, usando este código:
conn = httplib.HTTPConnection(self._host, self._port)
conn.putrequest(''GET'',
''/retrieve?id={0}''.format(parsed_store_response[''id'']))
retr_response = conn.getresponse()
No me di cuenta de que estaba usando putrequest
lugar de request
; Estaba mezclando mis interfaces. ResponseNotReady
se genera porque todavía no he enviado la solicitud.