python3 humans for cliente python http rest httplib

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.