Python httplib ResponseNotReady
Я пишу клиент REST для elgg, используя python, и даже когда запрос успешно выполняется, я получаю это в ответ:
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:Python25libhttplib.py", line 918, in getresponse
raise ResponseNotReady()
httplib.ResponseNotReady
Глядя на заголовок, я вижу ('content-length', '5749'), поэтому я знаю, что там есть страница, но я не могу использовать .read (), чтобы увидеть его, потому что возникает исключение. Что означает ResponseNotReady и почему я не могу увидеть содержимое, которое было возвращено?
5 ответов:
Убедитесь, что вы не используете повторно один и тот же объект из предыдущего соединения. Вы нажмете это, как только сервер keep-alive закончится и сокет закроется.
Предыдущие ответы верны, но есть еще один случай, когда вы можете получить это исключение:
Выполнение нескольких запросов без полного считывания промежуточных ответов.
Например:
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
И так далее.
Я столкнулся с этим же исключением сегодня, используя этот код:
conn = httplib.HTTPConnection(self._host, self._port) conn.putrequest('GET', '/retrieve?id={0}'.format(parsed_store_response['id'])) retr_response = conn.getresponse()
Я не заметил, что использую
putrequest
вместоrequest
; я смешивал свои интерфейсы.ResponseNotReady
поднят, потому что я еще не отправил запрос.