Python httplib 响应未就绪

46 投票
6 回答
47283 浏览
提问于 2025-04-16 01:11

我正在用Python为elgg写一个REST客户端,即使请求成功,我在响应中还是得到了这个:

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

查看响应头,我看到有一个('content-length', '5749'),这说明确实有内容返回,但我无法使用.read()来查看,因为出现了异常。ResponseNotReady是什么意思?为什么我看不到返回的内容呢?

6 个回答

2

今天我遇到了同样的错误,使用了这段代码:

    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 这个错误出现是因为我还没有真正发送请求。

87

之前的回答是对的,但还有一种情况也可能导致你遇到这个异常:

就是在没有完全读取任何中间响应的情况下,发起多个请求。

比如说:

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

等等。

46

确保你不要重复使用之前连接中的同一个对象。当服务器的 keep-alive 结束,套接字关闭时,你会遇到这个问题。

撰写回答