несколько запросов в одном соединении? - PullRequest
3 голосов
/ 15 декабря 2009

Можно ли поставить несколько запросов без разрыва соединения, используя python httplib ?. Мол, могу ли я загрузить большой файл на сервер по частям, но с помощью одного сокета.

Я искал ответы. Но ничто не казалось таким ясным и определенным.

Любые примеры / связанные ссылки будут полезны. Благодарю.

Ответы [ 2 ]

12 голосов
/ 15 декабря 2009

Да, соединение остается открытым, пока вы не закроете его, используя метод close().

В следующем примере, взятом из документации httplib , показано, как выполнить несколько запросов с использованием одного подключения:

>>> 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()
2 голосов
/ 05 апреля 2012

Вы должны обязательно вызвать функцию .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]).

...