单个连接中的多个请求?

时间:2009-12-15 09:09:38

标签: python connection httplib

是否可以在不破坏连接的情况下使用python httplib来放置多个请求? 比如,我可以将一个大文件部分上传到服务器,但只能在单个套接字连接中。

我寻找答案。但似乎没有什么是如此清晰明确。

任何示例/相关链接都会有所帮助。 谢谢。

2 个答案:

答案 0 :(得分:12)

是的,连接保持打开状态,直到您使用close()方法关闭它。

以下示例摘自httplib documentation,显示了如何使用单个连接执行多个请求:

>>> import httplib
>>> conn = httplib.HTTPConnection("www.python.org")
>>> conn.request("GET", "/index.html")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
200 OK
>>> data1 = r1.read()
>>> conn.request("GET", "/parrot.spam")
>>> r2 = conn.getresponse()
>>> print r2.status, r2.reason
404 Not Found
>>> data2 = r2.read()
>>> conn.close()

答案 1 :(得分:2)

您需要确保在响应中调用.read()函数。否则你会收到如下错误:

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    conn.request("GET", "/2.html")
  File "C:\Python27\lib\httplib.py", line 955, in request
    self._send_request(method, url, body, headers)
  File "C:\Python27\lib\httplib.py", line 983, in _send_request
    self.putrequest(method, url, **skips)
  File "C:\Python27\lib\httplib.py", line 853, in putrequest
    raise CannotSendRequest()
CannotSendRequest

如果未读取返回数据,则会引发此异常(即使未返回任何数据,或收到HTTP错误[例如404])。